Next Previous Contents

3. 使用 SGML-Tools 撰写文件

使用 SGML-Tools DTD 撰写文件的过程大部分是非常容易的,而且有点类似 LaTeX. 然而,仍然有些限制要注意.这一节我将介绍 SGML 文件的撰写. SGML 文件□例(及写作指引)请参阅 example.sgml 档案,你可以拿来当作自己文件的□本. 在此我将讨论 SGML 的各项功能,但是以原始文件作为□例不是很有可读性. 因此,印出 example.sgml 的原始码(编排後的输出),如此你就有真实的参考□例。

3.1 基本概念

仔细看□例文件的原始文件,你会注意到里面有许多以角括号(<>)标示的「标签(tags)」. 标签单纯地指出某组成元素的起始,这里所谓的组成元素是一节,一段,一句斜体的文句,列表中的一个项目,以及诸如此类的结构. 使用标签就像使用 LaTeX 指令如 \item 或是 \section{...} 等一般.

举个简单的例子,要产生这一段 粗体文字,我在原始码中键入

举个简单的例子,要产生这一段 <bf>粗体文字</bf>, ...
<bf> 是这段粗体文字的开头,而 </bf> 是结尾. 你也可以使用这个简略形式:
举个简单的例子,要产生这一段 <bf/粗体文字/, ...
就是用斜线将粗体文字包住.(当然,如果被包含的文字含有线,你就必须使用长的形式, 例如 Unix 的档案名称.)

关於特殊字元还有其它得要注意的问题 (这就是为什麽如果你仔细观察原始文件就会注意到这些看起来很怪异 "&" 表示式;我将简短地说明这些符号).

在某些情况下,特定的组成元素之结尾标签是可选用的. 例如,你在某一节的开始使用 <sect> 这个标签,然而,该节的结尾标签 (可以出现在该节主体本身结束的地方,而不只是该节的名称後面!) 是可选用的而当你在同一个层次开始另外一节的时候也就暗示著该节的结束. 一般来说你不需要担心这些细节;只要跟著使用在 example.sgml 指引里的□例就可以了。

3.2 特殊字元

很明显的,角括号它们本身就是 SGML 原始文件里的特殊字元.另外还有其它该注意的字元. 例如,假设你想键入由角括号所涵盖的表示式,像这样: <foo>. 为了表示左边的角括号,你必须使用 &lt; 这个组成元素, 这是一个会展开成左括号字元的「巨集」.因此,我在原始文件中键入

angle brackets around it, as so: <tt>&lt;foo></tt>.
一般来说,以结合字元(&)作为开始表示这是一个特殊的巨集. 例如,产生 % 符号的 &percnt; 产生 | 的 &verbar; 等等. 对於所有的「特殊字元」都有结合巨集可以表示它们.

通常,你不需要使用结合巨集表示某特殊字元,然而,在某些情况下这是必须的。最常用的是:

完整的特殊字元列表可以查看其中一个替换档. 通常 LaTeX 最会抱怨特殊字元,所以查阅 $SGMLTOOLSLIB/rep/latex/general 会是个好的开始. $SGMLTOOLSLIB 定义在 SGML 转换程序的最前面.

3.3 Verbatim 与 Code 环境

当我们正讨论特殊字元这个主题时,我也必须提到「verbatim 环境」, 用来在输出中含入不加变动的文字(空白字元以及缩排,和诸如此类). verb 这个组成元素就是做此用途的.它看起来就像这样:

<verb>
 Some literal text to include as example output.
</verb>
verb 环境不允许你在其内容中使用任何东西. 特别地,在 verb 环境中你必须: code 环境非常类似 verb 环境,除了在文字周围加入分隔线
这是 code 环境的例子.

你应该在任何 verb 环境的周围使用 tscreen 环境,像这样:

<tscreen><verb>
这是一段例句.
</verb></tscreen>
tscreen 是一个环境单纯地缩排并设定预设字型为 tt. 这使得□例要论在 LaTeX 以及纯文字的版本中看起来好多了. 你可以使用 tscreen 而不加 verb,不过,如果你在□例中使用任何的特殊字元那麽你就需要它们两个. tscreen 与特殊字元无关.□例请参阅 example.sgml

quote 环境类似 tscreen,除了不将预设字型设为 tt.所以,你可以使用 quote 於与电脑无关的引用,如:

<quote>
Here is some text to be indented, as in a quote.
</quote>
这会产生:
Here is some text to be indented, as in a quote.

3.4 文件内容概观

在我们深入研究细节之前,我要开始介绍 linuxdoc DTD 定义的文件概观.文件如何设立的□例请仔细观看 example.sgml

序文

在文件的「序文」中你设立像是标题以及文件型态(style)的东西.Linux HOWTO 文件看起来应该像:

<!doctype linuxdoc system>

<article>

<title>Linux Foo HOWTO
<author>阿伟, <tt/cwhuang@phys.ntu.edu.tw/
<date>v1.0, 14 August 1997
<abstract>
这份文件说明了如何使用 <tt/foo/ 这个工具.
</abstract>

<toc>

这些组成项目可以酌予增减但须按此顺序.第一行告诉 SGML 解析程式使用 linuxdoc DTD. <article> 这个标签规定文件使用「article」此种文件型态. (原先的 QWERTZ DTD 还定义 「report」以及「book」等型态;我并没有修改它们以在 SGML-Tools 中使用).

title, author, 以及 date 这些标签的意义应该是很明显的, 在 date 标签中包含文件的版本编号以及最後修改时间.

abstract 标签设定文件顶端在内容之前印出的文字. 如果你不想含入内容列表(toc 标签),那麽你可能不需要 abstract

章节与段落

在序文之後,你就可以准备进入文件本身.有下列的分节指令可以使用:

它们相当於 LaTeX 中对应的 section, subsection 等等.

sect (或 sect, sect 等等) 标签之後跟著是该节的名称. 例如,在文件的顶端,序文之後的是此标签:

<sect>简介
而在此节开始的地方(段落),有个标签是:
<sect2>段落
在一节的标签之後,你开始文件的主体.然而,你必须以一个 <p> 标签开始,像这样:
<sect>简介
<p>
这是一份 SGML-Tools 文件处理的使用者指引....
这是告诉解析程式你已完成一节的标题并且准备好开始本文主体. 其後,新的段落是以空白行开始(就如同 TeX).例如,
这是第一段的结尾.

而我们从这里开始新的一段.
没有什麽理由要在每个段落的前面使用 <p> 标签;只要在分节指令後面的第一个段落开始处加就行.

文件结尾

在文件结束的地方,你必须使用这个标签:

</article>

以告诉解析程式你已经完成 article 这个组成元素(涵盖整份文件).

3.5 交互参考

现在我们要进入系统的其它功能.交互参考很容易.例如,如果你想要制作某一节的交互参考,你得像这样标示该节:

<sect1>简介<label id="sec-intro">
接著你就可以在文件中的某个地方式用这个表示式参照该节:
请参考<ref id="sec-intro" name="简介">一节的介绍.
这将会以 sec-intro 标记的节号替换掉这个 ref 标签. 对於 groff 以及 HTML 转换 name 这个参数是必须的. SGML-Tools 使用的 groff 巨集设定目前并未支援交互参考,而且它常常以名称取代数字参照某一节.

例如,本节是 交互参考

在全球资讯网上使用的通用资源定位器,即 URL 也有组成元素 url. 这个元素应该用来参照其它文件,FTP 上的档案等等.例如:

你可从此取得 Linux HOWTO 文件
<url url="http://sunsite.unc.edu/mdw/HOWTO/" 
   name="The Linux HOWTO INDEX">.
url 这个参数指定这个 URL 本身.连结会自动加入到 HTML 文件中. 可选用的 name 参数指定应该加上连结的文字(HTML 转换)或是为 URL 描述命名(LaTeX 或 groff).如果没有给 name 参数,会使用这个 URL 本身.

例如,你可以从这里取得 SGML-Tools 套件
ftp://sunsite.unc.edu/pub/Linux/utils/text/sgml-tools-0.99.0.tar.gz.

一个有用的变形是 htmlurl,除了 HTML 文件在其它每种文件中这个 URL 部份将不会出现. 它用在像是个人的电子邮件位址;你可以写

<htmlurl url="mailto:esr@snark.thyrsus.com"
      name="esr@snark.thyrsus.com">
而在纯文字输出中获得「esr@snark.thyrsus.com」 而不是重复的「esr@snark.thyrsus.com <mailto:esr@snark.thyrsus.com>」 但是在 HTML 文件中仍然保有适当的 URL 部份.

3.6 字型

基本上,SGML-Tools 支援与 LaTeX 相同的字型. 注意,无论如何,纯文字的转换(经由 groff)不理会有关字型的资讯. 所以,你可以尽可能的使用多种字型,这对 LaTeX 的转换会有好处. 但是在纯文字的版本中不要指望能用字型点出重点.

特别是,前面描述过的 tt 这个标签可以用来获致宽度固定的「打字机」字型, 这应该用在所有的电子邮递位址,机器名称,档案名称等等. 例如:

Here is some <tt>typewriter text</tt> to be included in the document.
相当於:
Here is some <tt/typewriter text/ to be included in the document.
记得如果被包含的文字不含有斜线你可以使用简略形式.

其它的字型有 粗体字 用的 bf 以及 斜体字 用的 em. 另外还支援数种字型,但是我不建议你使用它们,因为它们会被转换成像 HTML 不支援的字型. 粗体,打字机体,以及斜体应该能满足你的需要.

3.7 列表

此系统支援数种不同的列表.它们是:

itemize 或是 enum 里的项目必须以 item 标签加以标示. 在 descrip 里的项目必须以 tag 标示. 例如,
<itemize>
<item>这是一个项目.
<item>这是第二个项目.
</itemize>
看起来像是这样: enum
<enum>
<item>这是第一个项目.
<item>这是第二个项目.
</enum>
你应看得出来,列表可以是巢状的.细节请参阅□例文件.

descrip 列表稍有不同,而且有点难看,但是在某些情况下你可能会想使用它:

<descrip>
<tag/Gnats./ Annoying little bugs that fly into your cooling fan.
<tag/Gnus./ Annoying little bugs that run on your CPU.
</descrip>
最後看起来像:
Gnats.

Annoying little bugs that fly into your cooling fan.

Gnus.

Annoying little bugs that run on your CPU.

3.8 更进一步的资讯

  1. QWERTZ 使用者指引可以从这里取得 ftp://ftp.cs.cornell.edu/pub/mdw/SGML. QWERTZ (以及 SGML-Tools) 还支援像是数学公式,表格,图形等许多特性. 如果你想用 SGML 写一般的文件,我建议你用原来的 QWERTZ DTD 而不要用修改过的 linuxdoc DTD, 因为这是我特别用来写 Linux HOWTOs 及其它类似文件用的.
  2. Tom Gordon 的 QWERTZ tools 可在此找到: ftp://ftp.gmd.de/GMD/sgml.
  3. 更多关於 SGML 的资讯可以在下面这些网页找到:
  4. James Clark 的 sgmls 解析器,及後来的 nsgmls 还有其它工具可在这找到: ftp://ftp.jclark.com 以及 James Clark's WWW Page.
  5. emacs psgml 可在此找到: ftp://ftp.lysator.liu.se/pub/sgml.这个工具提供许多 SGML 的功能.
  6. 你可以寄电子邮件到 majordomo@via.ecp.fr 以参与 SGML-Tools mailing list,内容写 subscribe sgml-tools. Mailing list 的地址是 sgml-tools@via.ecp.fr
  7. 关於 LyX 的更多资讯可以在此找到: LyX WWW Page. LyX 是一个给 LaTeX 用的高阶文字处理器前端. 具半所见即所得界面,会自动产生许多 LaTeX 的样式及格局. 可以增快 LaTeX 的学习而且使复杂的格局变简单且直接.

Next Previous Contents