原始地址:http://www.linuxfocus.org/ChineseGB/September2002/article257.shtml


[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 包里面找到这个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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。 普通的 DocBookXML 文档不能识别 JReferences,使用那个 DTD 会产生不合法的文档。JReferences 模块,可以同时识别 DocBook 和 JReferences(对于 DocBook 的高手:还不可以识别 SVG 和 MathML)。这样,使用 这个模块你就可以再次确认你的文档。上面的例子就是一个合法的 DocBook 文档。

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

下面的几行包括了 DocBook 的基本内容,下一个非常有趣的行是第 17 行。在这行里,引用了第一个注释。Latex 用户会喜欢 \cite{} 表示这个,JReferences 的语法是<jref:citeid="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 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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 forKate(参见 Editing DocBook XMLDocuments),并且被自动安装到了 $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(见下面):

1
2
3
jref-clear --filedb
jref-set --filedb --bibtexml references.bibtexml
jref-number --filedb article.docbookxml &gt; article-numbered.docbookxml

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

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

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

格式化样式表

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

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

1
2
3
4
5
6
7
8
9
10
<jref:reflist style="ACS"/>
</pre>
<a name="257lfindex5"></a>
<h3>安装 JReferences</h2>
<p>JReferences 需要已经安装了 Java 1.3(或更高)、Xerces、 Log4J 和 DocBook XML DTD 4.1.2。某些工具需要附加的工具,例如 python(BibTex 2 BibTeXML转换需要),还有 Perl(用来清除 EndNote 的 BibTex 输出)。</p>
<p>如果这些已经都安装好了,可以这样安装 JReferences:</p>
<code lang="bash">
./configure --prefix=$HOME
make
make install

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

关于本工程

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

参考