CTEX社区

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 207326|回复: 262

[中文处理] 发布GBT7714-2005.bst version1 Beta版

[复制链接]
发表于 2006-5-22 23:17:54 | 显示全部楼层 |阅读模式
本帖最后由 milksea 于 2010-5-4 17:49 编辑

在Sake J. Hogeveen所给的authordate1.bst文件的基础之上,通过不断试错和调整,得到中文参
考文献样式文件GBT7714-2005.sty。该样式文件利用BibTEX,并结合fixbbl,能够生成基本符合国
标GB/T 7714-2005的参考文献。
分别针对著者-出版年和顺序编码制的GBT7714-2005N.bst和GBT7714-2005AY.bst两个文件包含
在GBT7714-2005.bst.rar中。GBT7714AY.pdf和GBT7714N.pdf是按照著者-出版年和顺序编码制编译后的结果。
该样式文件仍有一些小问题有待解决。期待您的反馈意见。


修改记录和最新版本的通知,时间排序由新到老:
%%%%%%%%%%%%%%%%%%%%%%%
2006年5月25日:
增加了GBT7714-2005AYLang.bst和GBT7714-2005NLang.bst,中英文文献类型不予以区分,用同一类型,通过Lang域控制是否为中文文献,Lang的域值非空则代表中文文献。新加GBT7714-2005Lang.bib作为这两个bst文件的测试参考文献库。
同时修改了GBT7714-2005AY.bst和GBT7714-2005N.bst的几个小错误,完善了说明文档。
%%%%%%%%%%%%%%%%%%%%%%%
2006年5月24日Version 1 Beta 2 测试版:
发布最新的GBT7714-2005.sty,经过这次大的修改后的,GBT7714-2005.sty已经较为完善,基本能满足要求。
修正了以前GBT7714-2005N.sty不能按照参考文献在文中自然引用次序排序的问题。修正了“等”前面的空格,将正文中作者的连接词改为“和”。
完善了说明文档。
考虑到说明文档的修改次数可能多于源文件的修改,故将其分开。
GBT7714-2005.bst20060524.rar是源文件;
GBT7714-2005.bst说明文档20060524.rar 则是最新的说明文档;
GBT7714AY.pdf和GBT7714N.pdf是说明文档分别以作者年和顺序编码制编译后的结果。

感谢ryang和laughcry所提的建议。

%%%%%%%%%%%%%%%%%%%%%%%
2006年9月19日Version 1 Beta 3 测试版:
一直忙于论文,直到现在才有时间更新。这次更新修改了几个小的错误,如论文的中文文献标识码被搞错等。

考虑到与jabref的兼容性,以及平时管理的方便性,最终还是决定采用加入一个新的language域来区分中英文文献的做法,而且最近发现JStor数据库正是采用的这一方法。
以后版本只发布GBT7714-2005AYLang.bst(GBT7714-2005NLang.bst),
如果需要GBT7714-2005AY.bst (GBT7714-2005N.bst),使用者可以自行修改GBT7714-2005AYLang.bst(GBT7714-2005NLang.bst)。

另外在说明文档中加入了一些对GBT7714-2005.sty修改的方法和Jabref使用的相关技巧。

%%%%%%%%%%%%%%%%%%%%%%%
2006年10月11日
今天突发奇想成功修改了GBT7714-2005.bst的姓名间的连接符问题。
以前版本的GBT7714-2005.bst中,文中姓名的连结符无论中英文都使用“和”与“等”,很不方便。
修改后能针对中英文献(利用language域是否空区分中英文献)分别用“和/等”与“and/et al.”。

至此GBT7714-2005.bst已经比较完善了。

%%%%%%%%%%%%%%%%%%%%%%%
2006年10月30日
感谢aspire指出重复出现年的问题。
问题出在当时调整著者-出版年格式的时候,在前面加了输出年的选项,而后面的忘记删除了,已经将下载文件重新更新。

%%%%%%%%%%%%%%%%%%%%%%%
2007年4月6日
感谢tinwai指出英语的硕士论文不显示论文题目的问题。
误将format.title搞成了format.btitle。

重新上载文件,发觉只能添加而不能删除以前的附件。请各位使用者下日期最新的那个。

%%%%%%%%%%%%%%%%%%%%%%%
2007年5月9日
修改了GBT7714-2005NLang.bst中的一个bug:\citeyear{***},编译的结果是“1997(@",修改后为“1997”。
此次没有对GBT7714-2005AYLang.bst进行修改,压缩包GBT7714-2005.bst20070509.rar中是修改后的GBT7714-2005NLang.bst和4月6日发表的GBT7714-2005AYLang.bst。
不让我删除附件唉再次表示郁闷。

%%%%%%%%%%%%%%%%%%%%%%%
2010年5月4日
upcase命令中误用\textsc(小体大写)命令,不完全符合国标中的全体大写。
改为使用change.case命令。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2006-5-22 23:50:12 | 显示全部楼层
刚刚发现一个小错误,又修改了一下,由于是测试阶段的Beta版,最近可能会作较多修改,并且随时上传最新的文件。不便之处敬请原谅。


欢迎反馈使用意见。不太熟悉如何写说明文档,希望还能让人看得懂。
稍后有空时,会更好的完善说明文档。

最简单的办法,莫过于模仿,不妨对照GBT7714-2005.bib参考文献库中对文献的分类和相关域的设置。

再次提醒:规定域的缺省一般被GBT7714-2005.bst考虑在内,然而,非规定域的设置可能会导致错误输出。


文后参考文献著录规则 GB/T 7714-2005
标准号: GB/T 7714-2005
标准名称: 文后参考文献著录规则
纸书定价: 14元
可以在如下网站下载
<a href='http://www.scinote.com/supportcn/cgi-bin/topic_show.cgi?id=903&h=1&bpg=1&age=-1' target='_blank'>http://www.scinote.com/supportcn/cgi-bin/t...=1&bpg=1&age=-1</a>
发表于 2006-5-23 12:45:40 | 显示全部楼层
功德无量。
支持
发表于 2006-5-23 16:25:16 | 显示全部楼层
精神可嘉!几个小小的建议。

1. 中英文中的 “等” 与 “et al.” 可以用 sed 工具在 bbl 文件中进行自动替换。
2. 例子中的“郭某某 等” 中间的空格似乎不应出现。fixbbl 处理后的结果应该是没有这个空格的。
3. 使用 fixbbl 处理后,中文的 “等” 与英文的 “et al.” 似乎是可以并存的。至少以前我修改 plainnat.bst 就是这样的结果。当时为了把英文作者之间的 “and” 改为 “和” 还用上了 sed 程序,不过国标好象没有规定 “Smith 和 Jones (2003)” 这样的写法。
4. 新建 cbook 等新的类,可能会使工作量大大增加。建议参考一下薛瑞尼维护的 thuthesis 模板的作法,即在所有中文文献中增加一个域 “lang = {chinese}”,然后只需修改相应的 bst 文件就行了,基本上不需要使用新的 sty 文件。

纯粹个人想法,仅供参考。
 楼主| 发表于 2006-5-23 16:25:50 | 显示全部楼层
都这么客气不提问题啊:)

今天想到完善misc类型,将它变为一个无所不包的类型,涵盖所有类型的输出形式,因而不知道该如何分类的类型可以归入misc类,“总”能得到正确的输出结果。当然这只是我的好愿望而已,没什么是完美的^_^

今天或是明天就会发布出来,请更新一下:)
 楼主| 发表于 2006-5-23 19:26:52 | 显示全部楼层
对4楼的答复:
问题1,我所指的&quot;et al&quot;和&quot;等&quot;必须要手工输入,是因为国标的规定当作者名多于四个时,
文后参考文献只列出前三位,随后加入&quot;et al&quot;和&quot;等&quot;。而我当时没有找到办法解决这一问题。
参考了一下薛瑞尼维护的 thuthesis 模板中的refs.bst,这一问题已经得到解决。
例如新的Des Marais et al. (1992)的相关域如下所示,对于四个作者,GBT7714-2005.bst
已经能自动予以截尾,并相应加入&quot;et al&quot;和&quot;等&quot;。
@ARTICLE{MARAIS1992,
  AUTHOR =       {Des Marais, David J and Strauss, Harald and Summons, Roger E and Hayes, J. M.},
  TITLE =        {Carbon isotope evidence for the stepwise oxidation of the Proterozoic environment},
  JOURNAL =      {Nature},
  YEAR =         {1992},
  volume =       {359},
  number =       {},
  pages =        {605-609},
  month =        {},
  note =         {},
  abstract =     {},
  keywords =     {},
  source =       {},
}
输出结果:
Des Marais D J, Strauss H, Summons R E,et al. 1992. Carbon isotope evidence for the
stepwise oxidation of the Proterozoic environment[J]. Nature, 1992, 359:605{609.

问题2正文中的中文文献多于三个作者时显示“等”,可以拷贝到word
就能发现,“等”与前面的姓名之间并没有空格。问题在于显示的“等”是斜体的,所以看起来与前面有一定距离。
这一问题如何解决还不知道。希望有谁能提供一些思路。

问题3和1是同一个问题。另外,必须注意正文和文后的处理方法是不同的。
sed我不熟悉,好像是一个很专业的软件。估计我不可能会去完全掌握了。
ryang能否帮我用sed或其他软件,做一个可执行文件执行如下功能(主要是替代):
1将正文中的斜体“等”换为正体的&quot;等&quot;
2对bbl进行操作,将&quot;]//.&quot;替换为&quot;]//&quot;?
最好能是可执行文件,这样就能加入批处理文件中,使用起来就很方便了。
GBT7714-2005.bst也就更加完善了。


问题4设计时我没有注意到thuthesis这一做法。
GBT7714-2005.bst定义新的类型,
而thuthesis加入新的域,就效果而言,只要能通过bst文件得到正确结果,两种方式就没什么优劣之分。

相对而言,我认为GBT7714-2005.bst在平时维护方面会比thuthesis新加一个域的做法更有优势。
由于thuthesis加入一个新的域,每次输入“lang = {chinese}”,本身就加大了工作量。而且thuthesis的中文文献lang的域值必须是&quot;chinese”,否则会按照英文文献的形式处理。因此可能会因为输入时输错该域值,而导致错误输出。

GBT7714-2005.bst对参考文献条目的日常维护方法如下:
a将中英文文献分别作为不同的bib文件存放;
b平时输入参考文献条目时,可以将中文文献的类型也按照相应英文文献类型来设置,
即中文书和英文书一样都用book类型,
c对文献运用GBT7714-2005.bst处理前,在中文文献的bib文件中查找符号&quot;@&quot;,
并替换为&quot;@C&quot;,另存为一个新的bib文件。一般而言,符号&quot;@&quot;多半用于电子邮箱中,
参考文献名中出现符号&quot;@&quot;的概率很小,因而这一替换能正确地将中文参考文献的类型由
输入时的英文的类型替换为相应的中文参考文献类型,
例如,将&quot;@BOOK&quot;中的&quot;@&quot;替换为&quot;@C&quot;之后,得到&quot;@CBOOK&quot;,相应的类型由book变为cbook。
如果采用新加入一个域的方式,似乎就不能如此方便的操作了。
同时给出一点提示:将&quot;@&quot;替换为&quot;@C&quot;前,为避免错误的替换,最好借助于winedt的search in files或
ultraedit的“文件中搜索&quot;功能查找并浏览是否参考文献题目中使用过符号&quot;@&quot;。当然作为参考文献的输入者,
输入时就能知道是否曾经输入和使用过符号&quot;@&quot;。



设置好misc类型之后会上传修正后的GBT7714-2005.bst
并且在以后发布GBT7714-2005.bst时会在文件开头加入date这一域,表明修改完成的时间。
%%%     date            = &quot;2006/5/23 19:36&quot;
测试阶段,版本会不停更新,只是希望GBT7714-2005.bst能够更加完善,请注意最新的版本。
发表于 2006-5-23 20:11:24 | 显示全部楼层
支持啊,··
 楼主| 发表于 2006-5-24 04:01:39 | 显示全部楼层
“等”前面的空格问题已经解决,顺序编码制已经调整为按照文中出现次序排序。GBT7714-2005.bst 的又完善了一步。

今天时间太晚了睡觉先。
再测试一下,最近会把新的版本发到网上。

好像大家没什么反馈嘛,也不知道大家对这bst有什么想法?:)
发表于 2006-5-24 12:43:06 | 显示全部楼层
1.  working paper 可以使用 TechReport 类,在 type 域中指定 “working paper”  或者 “ discussion paper”。number 域指定 working paper 的编号。

2. 关于 sed 替换。下面是一个简单的命令行,可以将 ]//. 替换成 ]// 。linux 系统一般自带 sed 工具,windows 系统则可能要安装一下 sed 的 windows 版。至于将这个功能写成普通可执行文件,自己不太懂 C 语言,恐怕做不了。不过,建议你可以和 hooklee 联系一下,让他帮你写一个,或者把这个功能集成到 fixbbl 中。另外,照着 fixbbl 的 C 语言源文件应该也可以弄出来一个。

sed -i &#39;/\]\/\/\./s/\.//&#39; main.bbl

其中 main.bbl 假定是目标 bbl 文件。

3. 关于增加 lang 域。thuthesis 中关于 bst 的修改部分似乎并不检查 lang 域的内容是否是 chiese,而只是检查一下该域是否存在,因此偶尔有笔误应该也无妨。
 楼主| 发表于 2006-5-24 14:37:28 | 显示全部楼层
1我确实在想在techreport和unpublished两类中选择一个。
问题是好像没看到国标对这个问题进行过相关的规定,也没看到国标给出任何示例。不知道文献标识码该如何设置阿?

2建议很好,我也这么想过,我会去建议hooklee在fixbbl中集成一个自动替换bbl文件中某些字段的命令,
最好能通过cfg文件来外部设置i。

3thuthesis的thubib.bib的第328到349行如下所示:
              t &quot;others&quot; =
                {
                  lang empty$
                    { &quot; &quot; * bbl.etal * }
                    { lang &quot;chinese&quot; =
                       { &quot; &quot; * bbl.cn.etal * }
                       &#39;skip$
                      if$
                    }
                  if$
                }
                {
                  lang empty$
                    { &quot; and &quot; * t * }
                    { lang &quot;chinese&quot; =
                       { &quot;, &quot; * t * }
                       &#39;skip$                  
                     if$
                    }
                  if$
                }
              if$
代码表明当lang域值为chinese时,则文后参考文献会自动加上“等”,否则加入逗号,因而正确的设置lang为chinese时得到:
贾宝玉, 林黛玉, 薛宝钗,等. 论刘姥姥食量大如牛之现实意义. 红楼梦杂谈, 1800,224:260–266
错误设置,例如设为ch时则显示为
贾宝玉, 林黛玉, 薛宝钗,. 论刘姥姥食量大如牛之现实意义. 红楼梦杂谈, 1800,
224:260–266
“等”字没有了。

因而,考虑到单词越长越容易出错,采用thubib.bib的使用者可以考虑自己修改“chinese”为一个更加简短的单词如“cn”或是字母“c”。呵呵


另外,thubib.bst和chinesebst.bst的一个共有的问题是似乎只能采用顺序编码制,而不能采用著者-出版年制。
而我个人就比较喜欢著者-出版年方式的直观,加之chinesebst.bst的输出效果不能完全符合国标,所以也就自己动手写了GBT7714-2005.bst。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|CTEX ( 京ICP备05002817号 )

GMT+8, 2018-10-20 14:45 , Processed in 0.053906 second(s), 12 queries , Gzip On, XCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表