[LinuxFocus-icon]
首页  |  站点地图  |  索引  |  搜索

新闻 | 过往期刊 | 链接 | 关于LF
This article is available in: English  Castellano  ChineseGB  Deutsch  Francais  Italiano  Nederlands  Turkce  

[Photo of the Author]
by Egon Willighagen
<egonw(at)linuxfocus.org>

关于作者:

在Nijmegen大学获得了化学硕士学位,现在正在同一所 大学进行分子表述博士研究。喜欢玩篮球和写 Java applications程序。


目录:

 

在DocBook XML中使用BibTeXML书写科技文献

[Illustration]

摘要:

在本文里,我将向你展示如何和DocBook XML一起,就像使用 参考注释系统一样使用BibTex。我开发了一个使这个过程简单 化的工具并且包装成了JReferences发行版。



 

简介

Latex用户都知道BibTex是多么有用。 它是一个很易用的工具,可以在其他的科学文献里增加参考注释而不需要 关心实际的输出,因为它会自动更正的,例如,不需要任何手动的 设置就可以生成正确的配置。就像Latex一样。此外,在科技文献里面用 上标数字来对参考注释标号是很平常的。就像1。并且这些 数字要是连续的。BibTex也注意到了这一点。

DocBook正在一天天的成为我最喜欢的文本写作工具,因为它那 清晰的、基于XML的语法,还有对建立站点的有力的支持(例如CDK站点 http://cdk.sf.net/,就是全部 用DocBook完成的)以及手册页。 我下一步准备使用DocBook写科学文章。这样,我就需要基于DocBook的 BibTex。所以,我就写了一个JReferences

JReferences的功能比BibTex多了一点。就像BibTex一样, 它有一个从无格式文本数据库中提取参考注释并且自动编号的工具, 但是它能做的更多。它支持更多种格式(包括输入和输出), 还有一个可以被PHP前台访问的MySQL后台。 它还尝试着成为一个像EndNote一样的参考注释数据库。 不过,因为这是一个开放源码的项目(遵循GPL协议)所以现在除了 我自己还没有吸引很多开发者,开发的进展比较缓慢。 但是这并不是说它没有用,我会在这篇文章里给你展示其他的方面。

当这篇文章出版的时候,JReferences已经发展到了0.7.2版。 这篇文章考虑了这个版本。

 

一个DocBook文章

考察这个例子,你可以在JReferences包里面找到这个例子:

<?xml version="1.0"?>
<!DOCTYPE article PUBLIC
"-//JReferences//DTD DocBook JReferences Module //EN"
                         "../dtd/jreferences.dtd" []>
<article>

  <jref:mode>Number</jref:mode>

  <articleinfo>
    <title>Test Article</title>
    <author><firstname>Egon</firstname>
	<surname>Willighagen</surname></author>
    <date> 3 May 2000</date>
  </articleinfo>

  <section>
    <title>Some section</title>
    <para>This is a text with a reference
   <jref:cite id="Steinbeck99"/>.</para>
    <para>And now for some more serious tests, we
    add a second reference <jref:cite id="Bachrach99"/>.
    And again the first reference <jref:cite id="Steinbeck99"/>.
    </para>
  </section>

  <jref:reflist/>

</article>

下面我一行一行的解释这个例子。第一行是一个公共行(可选的) 说明了这个文件的语法是XML。第二行到第四行注明了在DocBook中 使用的是XML语言,但是使用了JReferences模块替代了普通DTD。 普通的DocBook XML文档不能识别JReferences,使用那个DTD会产生 不合法的文档。JReferences模块,可以同时识别DocBook和JReferences (对于DocBook的高手:还不可以识别SVG和MathML)。这样,使用 这个模块你就可以再次确认你的文档。上面的例子就是一个合法的 DocBook文档。

第五行包含了正文的开始标签。到现在为止,一直都还不错。 第七行,有意思的开始了:第一个jref元素。<jref:mode> 元素被用来告诉JReferences使用哪种类型的数字来标记参考注释。 在这个介绍里,我已经说过了上标数字是使用的最经常的。 不过,你有很多选择的。JReferences支持[1]、1、 还有[Steinbeck99]。其中后者指明了在参考注释中使用的代码。 这个示例中选择的是第一种。

下面的几行包括了DocBook的基本内容,下一个非常有趣的行是 第17行。在这行里,引用了第一个注释。Latex用户会喜欢\cite{} 表示这个,JReferences的语法是<jref:cite id="SomeID"/>。 其中的ID要和数据库中的注释相符合,我将在后面解释这个。 下一段有另外两个引用,其中一个又是第一个注释。

在第24行是用了<jref:reflist/>一边把真正的参考注释 包括进来。这个JReferences命令会会把他替换成一个DocBook格式的 参考注释列表,并且是按照他们被引用的顺序排列的。

 

BibTeXML数据库

JReferences系统需要一个数据库,在Latex/BibTex中有很多类似 *.bib的文件。JReferences支持BibTeXML后台,同时也支持其他的 (例如MySQL)。Vidar Gundersen和Zeger Hendrikse开发了 BibTeXML 在JReferences发行版(0.7.2)中还没有使用BibTeXML,但是这个 示例文章会有一个这样的BibTeXML文件:

<?xml version="1.0" encoding="UTF-8"?>
<bibtex:file xmlns:bibtex="http://www.bitjungle.com/~bibtex/">

<bibtex:entry bibtex:id="Steinbeck99">
  <bibtex:article>
    <bibtex:title>JChemPaint - Using
        the Collaborative Forces of the Internet to
        Develop a Free Editor for 2D Chemical
        Structures</bibtex:title>
    <bibtex:author>Steinbeck, C. and
                      Krause, S. and
                      Willighagen, E.</bibtex:author>
    <bibtex:year>2000</bibtex:year>
    <bibtex:volume>5</bibtex:volume>
    <bibtex:pages>93-98</bibtex:pages>
  </bibtex:article>
</bibtex:entry>

<bibtex:entry bibtex:id="Bachrach99">
  <bibtex:article>
    <bibtex:title>End-User Customized Chemistry Journal
    Articles</bibtex:title>
    <bibtex:author>Bachrach, S. and
                      Krassavine, A. and
                      Burleigh, D.</bibtex:author>
    <bibtex:journal>J.Chem.Inf.Comput.Sci.</bibtex:journal>
    <bibtex:year>1999</bibtex:year>
    <bibtex:volume>39</bibtex:volume>
    <bibtex:pages>81-85</bibtex:pages>
  </bibtex:article>
</bibtex:entry>

</bibtex:file>

第二行有跟元素的开始标签<bibtex:file>。这样的一个文件 里面有一个或者多个<bibtex:entry>元素。每一个entry都是由 一个BibTeXML参考注释类型组成:article、book、inbook、incollection、 unpublished、misc等。每一个这样的参考注释包括了那种类型的特别的元素, 但是很多都是相同的,例如<bibtex:title>和<bibtex:year>。 JReferences发行版已经包括了BibTeXML DTD,这样任何一个可以识别DTD的 XML编辑器都可以很用以的编写BibTeXML文档。此外,JReferences包括了 KDE 3.x中的Meta DTD's for Kate(参见 Editing DocBook XML Documents),并且被自动安装到了 $HOME/.kde/share/apps/katexmlplugin下面。

[kate]
Editing BibTeXML files with Kate, its XML plugin and JReferences' BibTeXML Meta DTD.
 

生成参考书目

看看上面的两个例子。那个DocBook文档被保存成了article.docbookxml, 而那个参考注释数据库被保存成了references.bibtexml。JReferences 还没有一个像bibetx程序那样的工具,但是可以用很少的几个命令完成 同样的事情。下面的命令假设你已经在一个类Unix的系统,例如Linux 上安装了JReferences(见下面):

jref-clear --filedb
jref-set --filedb --bibtexml references.bibtexml
jref-number --filedb article.docbookxml > article-numbered.docbookxml

生成的文件名为article-numbered.docbookxml,是一个合法的 而没有任何<jref:*>元素的BocBook XML 4.1.2文档, 并且可以被其他的转化DocBook XML文档的工具进一步处理成其他各式, 例如PDF。(参见示例 Making PDF documents with DocBook)。

[result]
The resulting PDF with numbered references and an included bibliography.

这就是你所需要知道的全部。或者说,事实上……

 

格式化样式表

还有一件很好玩的事情。BibTex支持样式表,因为大部分定期刊物 在参考书目的样式方面有特别的需求。JReferences现在只有两种样式。 第一种是某一种DocBook XML默认的格式,并不是一种真正的样式。 但是JReferences中还有一种American Chemical Society (ACS) 要求的样式表。

<jref:reflist>元素有一个@style属性,你可以用这个属性 来设置样式表以取代默认的样式表。要想使用ACS样式表,你需要 把第28行换成

<jref:reflist style="ACS"/>
 

安装JReferences

JReferences需要已经安装了Java 1.3(或更高)、Xerces、 Log4J和DocBook XML DTD 4.1.2。某些工具需要附加的工具, 例如python(BibTex 2 BibTeXML转换需要),还有Perl(用来 清除EndNote的BibTex输出)。

如果这些已经都安装好了,可以这样安装JReferences:

./configure --prefix=$HOME
make
make install

如果某些工具没有找到,试试这些选项:--with-xercesdir、 --with-log4javadir和--with-sgmldir。输入"./configure --help"可以看到关于这些选项的更多信息。

 

关于本工程

JReferences现在已经开发两年了,尽管已经被下载了很多次但是我 没有得到很多反馈。更确切地说,只有我自己的经验。在最近的几个月中, 已经成功地使用JReferences写了一篇真正的科学文献。不管怎么样, 就行任何一个好的开放源码的工程,JReferences工程站点欢迎任何 建议、错误报告、补丁、想法和成功的故事。

 

参考

 

对这篇文章发表评论

每篇文章都有各自的反馈页面。在这个页面里,您可以提交评论,也可以查看其他读者的评论:
 反馈页面 

主页由LinuxFocus编辑组维护
© Egon Willighagen, FDL
LinuxFocus.org

点击这里向LinuxFocus报告错误或提出意见
翻译信息:
en --> -- : Egon Willighagen <egonw(at)linuxfocus.org>

2002-10-31, generated by lfparser version 2.25