SGML-Tools 使用说明中译版 <author> 作者: Matt Welsh. Updated by Greg Hankins. <newline> 译者: <htmlurl url="http://www.phys.ntu.edu.tw/~cwhuang/pub/" name="C.W.Huang"> <tt><htmlurl url="mailto:cwhuang@phys.ntu.edu.tw" name="cwhuang@phys.ntu.edu.tw"></tt> <date> v0.99.0, 29 November 1996. 翻译日期: 4-15 August 1997 <!-- 译者 <url url="http://www.phys.ntu.edu.tw/~cwhuang/" name="阿伟"> <url url="cwhuang@phys.ntu.edu.tw" name="cwhuang@phys.ntu.edu.tw"> v0.99.0, 04-14 August 1997 --> <abstract> 这份文件是 SGML-Tools 的使用说明,一种以 SGML 为基础,让你产生不同输出格式的工具. 你可以用单一的 SGML 原始文件产生纯文字档 (ASCII 与 ISO-8859-1), DVI, PostScript, HTML, GNU info, LyX, 与 RTF 档. 这份文件说明以 SGML-Tools 0.99.0. 为准. </abstract> <!-- Table of contents --> <toc> <sect>简介 <p> 这是一份 SGML-Tools 文件处理系统的使用说明.SGML-Tools 提供一个 SGML DTD (文件形态定义,Document Type Definition) 及一组「置换档(replacement files)」,可以将 SGML 转换为 groff, LaTeX, HTML, GNU info, LyX, 与 RTF 的原始档. SGML-Tools 主要以 <url url="mailto:thomas.gordon@gmd.de" name="Tom Gordon"> 的 QWERTZ DTD 为基础发展的. <sect1>关於此文件 <p> 这份文件以附在 SGML-Tools 上的 linuxdoc DTD 所撰写的. 它几乎包含所有使用这份 DTD 来写 SGML 文件所需知道的事情. 请参考 <tt/example.sgml/ 这份 SGML □例,你可以拿它当作你自己文件的□本. <sect1>为何用 SGML? <p> 我选择使用 SGML 是因为 SGML 是专门用来转换成其它格式的. SGML 是 Standard Generalized Markup Language 的简称,它允许你指定文件的<em/结构/---也就是,用何种事物来标示文件. 你使用一份 DTD (文件形态定义) 来指定文件的结构.linuxdoc 是一种指定 Linux HOWTOs 与其它文件的 DTD. QWERTZ 是另一种 DTD; SGML 的标准提供书,文章,及其馀一般文件所使用的 DTD. DTD 指定文件中「组成元素」的名称.组成元素就是一种结构---例如章,节,段落,或是更小的像是这样的 <em/强调文字/.然而跟 LaTeX 不同的是,这些组成元素并非 SGML 本身内含的.linuxdoc DTD 就定义了类似 LaTeX 中的组成元素---你有章,节,或是「环境」等等.然而,利用 SGML 你可以照你喜欢定义文件的任何结构.就某方面来说,SGML 就像是低阶的 TeX,而 linuxdoc DTD 则像是 LaTeX. 别被这类比搞混了.SGML 并<em/不是/一种文件格式化系统.没有所谓的「SGML 格式」. SGML 的原始档<em/只是/用来转换成其它格式以便处理的.还有,SGML 本身是用来指定文件的结构. 没有 SGML 本身的文字格式化工具或是「巨集」之类的.所有的一切都定义於 DTD 中. 没有 DTD 你不能使用 SGML,一份 DTD 定义了 SGML 该做什麽. <sect1>它如何运作 <p> 这里解释如何使用 SGML-Tools 处理文件.首先,你需要一份 DTD.我用的是 QWERTZ DTD, 它本来是一群人因为需要类似 LaTeX 的 DTD 而做的.我将 QWERTZ DTD 修改成 linuxdoc DTD 以符合我们的需求.DTD 不过设定了文件的结构.它看起来像是这个样子的: <tscreen><verb> <!element article - - (titlepag, header?, toc?, lof?, lot?, p*, sect*, (appendix, sect+)?, biblio?) +(footnote)> </verb></tscreen> 这部份设定了「文件」的整个结构,就像是 LaTeX 的「documentstyle」. 这文件包含了一个书页名(<tt/titlepag/),一个可有可无的标题(<tt/header/),一个可选用的内容列表(<tt/toc/),可选用的图形列表(<tt/lof/)与表格列表(<tt/lot/),任意数量的段落(<tt/p/),任意数量的章节(<tt/sect/),可选用的附录(<tt/appendix/),一个可选用的参考书目(<tt/biblio/)以及注解(<tt/footnote/). 你可看出,DTD 并未说明文件应如何被格式化,或它看起来长得怎麽样. 它只不过定义了文件由何种部份所组成.在文件的另一个地方定义了 <tt/titlepag/, <tt/header/, <tt/sect/ 及其馀的组成元素. 写文件时你并不需要知道任何关於 DTD 的文法规则.我只不过让你看一下它长得什麽样子还有它做了什麽. 但你<em/必需/熟悉这份 DTD 所定义的文件<em/结构/.否则,在尝试写文件时你可能会违反结构, 而且被错误讯息搞昏了.下面我们会描述 SGML 文件结构的细节. 接下来就是用这份 DTD 所定义的结构来写文件了.再说一次,linuxdoc DTD 使得文件看起来长得像 LaTeX---所以很容易遵从.用 SGML 的术语来说,使用某一个特别的 DTD 来撰写的单一文件叫做那份 DTD 的「案例(instance)」. 为了将 SGML 原始档转换成其它格式(例如 LaTex 或 groff)以便处理,你所写的 SGML 原始档必须经 SGML <em/解析器/处理过.我用的是 James Clark(<tt><url url="mailto:jjc@jclark.com" name="jjc@jclark.com"></tt>) 所写的 <tt/sgmls/ 解析器, 他也是 <tt/groff/ 的作者.它用起来很方便.<tt/sgmls/ 读入你的文件,检查它遵循 DTD 所定义的结构. 它同时将你文件中的「巨集」和元素展开,以方便下一阶段的 <tt/sgmlsasp/ 来处理. <tt/sgmlsasp/ 用来将 <tt/sgmls/ 的输出结果转换成另一种格式(如 LaTeX). 它使用<em/置换档/将原始 SGML 文件中的组成元素转换成「目标」格式(如 LaTeX 或 groff)对应的原始档. 例如,一部份 LaTeX 的<em/置换档/长得像这样: <tscreen><verb> <itemize> + "\\begin{itemize} + </itemize> + "\\end{itemize} + </verb></tscreen> 它说明了当你在 SGML 原始档中使用 <tt/itemize/ 元素时,应该被置换成 LaTeX 原始档中的 <tscreen><verb> \begin{itemize} </verb></tscreen> (我说过了,DTD 中的元素像极了它们在 LaTeX 中的对应物.) 因此,要将 SGML 转换成其它格式,你所要做的就是为此格式写一个新的<em/置换档/, 在新格式中为每一 SGML 组成元素指定适当的对应.事实上,没这麽简单---例如, 如果你尝试转换成和你的 DTD 完全不同的结构,你就有麻烦.不过, 比起要为每一种格式写单独的解析器与转换程式还是要简单的多. SGML 提供一种一般的系统将一种原始档转换成许多格式. 一但 <tt/sgmlsasp/ 转换完成,你就有与原先 SGML 原始文件相对应的 LaTeX 原始档, 你可以像一般的 LaTeX 档一样来使用它.下面我会示□如何做这样的转换与格式化. 你只要用一行指令就够了. 不过首先,我要说明如何安装及设定 SGML-Tools. <sect>安装 <p> 首先从这个地方 <itemize> <item><tt><htmlurl url="ftp://sunsite.unc.edu/pub/Linux/utils/text/sgml-tools-0.99.0.tar.gz" name="ftp://sunsite.unc.edu/pub/Linux/utils/text/sgml-tools-0.99.0.tar.gz"></tt> </itemize> 取得 <tt/sgml-tools-0.99.9.tar.gz/. 你可以从 <tt><url url="http://www.xs4all.nl/~cg/sgmltools/" name="SGML-Tools WWW Page"></tt> 取得最新的资讯. <p> <tt/sgml-tools-0.99.0.tar.gz/ 包含了所有你需要用来写 SGML 文件并转换为 groff, LaTeX, HTML, GNU info, LyX, 与 RTF 的东西.除此之外,你可能还需要下列的工具---SGML 系统并不需要这些,但我建议你取得这些工具以方便你转换文件,在你公开散布你的文件前将先确定它们看起来没问题. <enum> <item><tt/groff/. 你<em/必须/使用 1.08 或更新的版本.你可以从 <tt><htmlurl url="ftp://prep.ai.mit.edu/pub/gnu" name="ftp://prep.ai.mit.edu/pub/gnu"></tt> 取得.在 <tt><htmlurl url="ftp://sunsite.unc.edu/pub/Linux/utils/text" name="ftp://sunsite.unc.edu/pub/Linux/utils/text"></tt> 可找到 Linux 的执行档.你必需使用 <tt/groff/ 让你的 SGML 文件产生纯文字档. <tt/nroff/ <em/不行/! <item><tt/TeX 与 LaTeX/. 这几乎在每个地方都有,你应该可以毫无困难地找到并安装 (在 <tt><htmlurl url="ftp://sunsite.unc.edu" name="sunsite.unc.edu"></tt> 可以找到 Linux 的执行档) 当然,如果你要用 LaTeX 来格式化你的 SGML 文件你才需要 TeX/LaTeX. <item><tt/flex/. <tt/lex/ 可能不行.你可以从 <tt><htmlurl url="ftp://prep.ai.mit.edu/pub/gnu" name="ftp://prep.ai.mit.edu/pub/gnu"></tt> 取得. <item><tt/gawk/ 与 GNU info tools, 用来格式化与预视 info 档案. 在 <tt><htmlurl url="ftp://prep.ai.mit.edu/pub/gnu" name="ftp://prep.ai.mit.edu/pub/gnu"></tt>, 或 <tt><htmlurl url="ftp://sunsite.unc.edu/pub/Linux/utils/text" name="ftp://sunsite.unc.edu/pub/Linux/utils/text"></tt> 可以找到 <tt/gawk/, 还有 <tt><htmlurl url="ftp://sunsite.unc.edu/pub/Linux/system/Manual-pagers" name="ftp://sunsite.unc.edu/pub/Linux/system/Manual-pagers"></tt> 可找到 GNU info tools. <tt/awk/ 不行. <item>LyX (一个半所见即所得(quasi-WYSIWYG) 的 LaTeX 界面),可在 <tt><htmlurl url="ftp://ftp.via.ecp.fr" name="ftp://ftp.via.ecp.fr"></tt> 找到. </enum> <sect1>安装软体 <p> 安装与设定 SGML-Tools 所需的步骤是: <enum> <item>首先,在某处解开 <tt/sgml-tools-0.99.0.tar.gz/ 的压缩档. 它将产生 <tt/sgml-tools-0.99.0/ 的目录.在那里解开都没有关系,只是不要把里面的东西搬离 <tt/sgml-tools-0.99.0/ 目录就行. <item>阅读 <tt/INSTALL/ 档,它包含了安装过程的细节. </enum> 如果一切顺利,你就可以使用它了. 译注: 其实就是执行 <tt/install/ 这支 shell script,回答它的问题就行了! <sect1>编排 SGML 文件 <p> 例如说你想要编排一份 SGML 文件叫 <tt/foo.sgml/,这里有一份简短的说明如何输出成不同的格式.完整的选项列表请参考 man pages. <sect2>产生纯文字输出 <p> 如果你想产生纯文字档,使用这个指令: <tscreen><verb> % sgml2txt foo.sgml </verb></tscreen> <p> 请注意我已调整 groff 转换为纯文字输出.也就是说,我将页首,页码,边框等去掉. 经过一些修改你可以从 groff 的输出产生 PostScript 与 DVI 格式,但我建议你用 LaTeX 比较好. <p> 你可以为 man pages 产生 groff 的原始档,而用 <tt/groff -man/ 将其编排. 执行这个指令: <tscreen><verb> % sgml2txt -man foo.sgml </verb></tscreen> <sect2>产生 LaTeX, DVI 或 PostScript 输出 <p> 要从 SGML 原始档产生 LaTeX 文件,就用: <tscreen><verb> % sgml2latex foo.sgml </verb></tscreen> <p> 如果你希望产生 PostScript 输出(经由 <tt/dvips/),可用 <tt/-p/ 选项: <tscreen><verb> % sgml2latex -p foo.sgml </verb></tscreen> <p> 或者你可以加上 <tt/-d/ 选项产生 DVI 档: <tscreen><verb> % sgml2latex -d foo.sgml </verb></tscreen> <sect2>产生 HTML 输出 <p> 如果你希望输出 HTML 档,用这指令: <tscreen><verb> % sgml2html -img foo.sgml </verb></tscreen> <p> 这将产生 <tt>foo.html</tt>, <tt>foo-1.html</tt>, <tt>foo-2.html</tt>, 等等 --- 每一章一个档案.<tt>foo.html</tt> 是首页,可以用你的 WWW 浏□器观看. 确定你所有的 HTML 档在同一目录下,因为它们是用相对的 URL 彼此参考的. HTML 档的图示目录指向 <tt>$SGMLTOOLSLIB/icons</tt> 所定义的目录. 这些档都应被拷贝到最後的位置上.<tt>$SGMLTOOLSLIB/</tt> 定义在 SGML 转换程序的最开头. <p> 如果你使用 <tt/sgml2html/ 而没有加上 -img 选项的话,产生的 HTML 文件会加上导读用的 "Previous", "Next", 以及 "Table of Contents" 标签. 你可以藉由在 <tt>$SGMLTOOLSLIB/rep/html/<filename></tt> 建立一个档案以盖过这些预设, 并且以你自己的话来取代它们.该档案的格式如下所示: he following format: <tscreen><verb> PrevPage: newvalue NextPage: newvalue TOC: newvalue </verb></tscreen> □例请参阅 <tt/deutsch/. <sect2>产生 GNU Info 格式的输出 <p> 如果你想要将你的档案编排成 GNU Info 浏览程式接受的格式,只要使用下列指令: <tscreen><verb> % sgml2info foo.sgml </verb></tscreen> <sect2>产生 LyX 格式的输出 <p> 欲产生 LyX 格式的出,使用这个指令: <tscreen><verb> % sgml2lyx foo.sgml </verb></tscreen> <sect2>产生 RTF 格式的输出 <p> 如果你想产生 RTF 格式的输出,执行这个指令: <tscreen><verb> % sgml2rtf foo.sgml </verb></tscreen> <p> 这将会产生 <tt>foo.rtf</tt>, 以及 <tt>foo-1.rtf</tt>, <tt>foo-2.rtf</tt>, 等等档案---文件的每一节自成一个档案. <sect2>检查 SGML 语法 <p> 如果你只是想从 SGML 转换中抓出你的错误,可以使用 <tt/sgmlcheck/ 这个指令稿. 例如: <tscreen><verb> % sgmlcheck foo.sgml </verb></tscreen> <sect1>ISO 8859-1 字元集 <p> ISO 8859-1 (latin1) 字元集可以用在纯文字 LaTeX, HTML, LyX, 以及 RTF 输出的国际字元(GNU Info 未来可能支援 ISO 8859-1). 要使用这项功能的话,可以加上 <tt/-l/ 选项给编排指令稿,例如: <tscreen><verb> % sgml2txt -l foo.sgml </verb></tscreen> 你也可以在 SGML 原始文件中使用 ISO 8859-1 字元,它们会自动被转换成对应文件格式的适当逸出字元(escape codes). <sect>使用 SGML-Tools 撰写文件 <p> 使用 SGML-Tools DTD 撰写文件的过程大部分是非常容易的,而且有点类似 LaTeX. 然而,仍然有些限制要注意.这一节我将介绍 SGML 文件的撰写. SGML 文件□例(及写作指引)请参阅 <tt/example.sgml/ 档案,你可以拿来当作自己文件的□本. 在此我将讨论 SGML 的各项功能,但是以原始文件作为□例不是很有可读性. 因此,印出 <tt/example.sgml/ 的原始码(编排後的输出),如此你就有真实的参考□例。 <sect1>基本概念 <p> 仔细看□例文件的原始文件,你会注意到里面有许多以角括号(<tt><</tt> 及 <tt/></tt>)标示的「标签(tags)」. 标签单纯地指出某组成元素的起始,这里所谓的组成元素是一节,一段,一句斜体的文句,列表中的一个项目,以及诸如此类的结构. 使用标签就像使用 LaTeX 指令如 <tt>\item</tt> 或是 <tt>\section{...}</tt> 等一般. 举个简单的例子,要产生这一段 <bf>粗体文字</bf>,我在原始码中键入 <tscreen><verb> 举个简单的例子,要产生这一段 <bf>粗体文字</bf>, ... </verb></tscreen> <tt><bf></tt> 是这段粗体文字的开头,而 <tt></bf></tt> 是结尾. 你也可以使用这个简略形式: <tscreen><verb> 举个简单的例子,要产生这一段 <bf/粗体文字/, ... </verb></tscreen> 就是用斜线将粗体文字包住.(当然,如果被包含的文字含有线,你就必须使用长的形式, 例如 Unix 的档案名称.) 关於特殊字元还有其它得要注意的问题 (这就是为什麽如果你仔细观察原始文件就会注意到这些看起来很怪异 "&" 表示式;我将简短地说明这些符号). 在某些情况下,特定的组成元素之结尾标签是可选用的. 例如,你在某一节的开始使用 <tt><sect></tt> 这个标签,然而,该节的结尾标签 (可以出现在该节主体本身结束的地方,而不只是该节的名称後面!) 是可选用的而当你在同一个层次开始另外一节的时候也就暗示著该节的结束. 一般来说你不需要担心这些细节;只要跟著使用在 <tt/example.sgml/ 指引里的□例就可以了。 <sect1>特殊字元 <p> 很明显的,角括号它们本身就是 SGML 原始文件里的特殊字元.另外还有其它该注意的字元. 例如,假设你想键入由角括号所涵盖的表示式,像这样: <tt><foo></tt>. 为了表示左边的角括号,你必须使用 <tt>&lt;</tt> 这个组成元素, 这是一个会展开成左括号字元的「巨集」.因此,我在原始文件中键入 <tscreen><verb> angle brackets around it, as so: <tt>&lt;foo></tt>. </verb></tscreen> 一般来说,以结合字元(&)作为开始表示这是一个特殊的巨集. 例如,产生 % 符号的 <tt/&percnt;/ 产生 | 的 <tt/&verbar;/ 等等. 对於所有的「特殊字元」都有结合巨集可以表示它们. 通常,你不需要使用结合巨集表示某特殊字元,然而,在某些情况下这是必须的。最常用的是: <itemize> <item>Use <tt>&amp;</tt> for the ampersand (&), <item>Use <tt>&lt;</tt> for a left bracket (<), <item>Use <tt>&gt;</tt> for a right bracket (>), <item>Use <tt>&lt;/</tt> for a left bracket with a slash (<tt></</tt>) <item>Use <tt>&dollar;</tt> for a dollar sign ($), <item>Use <tt>&num;</tt> for a hash (#), <item>Use <tt>&percnt;</tt> for a percent (%), <item>Use <tt>&tilde;</tt> for a tilde (˜), <item>Use <tt>``</tt> and <tt>''</tt> for quotes, or use <tt>&ldquo;</tt> for “, <tt>&rdquo;</tt> for ”. </itemize> <p> 完整的特殊字元列表可以查看其中一个替换档. 通常 LaTeX 最会抱怨特殊字元,所以查阅 <tt>$SGMLTOOLSLIB/rep/latex/general</tt> 会是个好的开始. <tt/$SGMLTOOLSLIB/ 定义在 SGML 转换程序的最前面. <sect1>Verbatim 与 Code 环境 <p> 当我们正讨论特殊字元这个主题时,我也必须提到「verbatim 环境」, 用来在输出中含入不加变动的文字(空白字元以及缩排,和诸如此类). <tt>verb</tt> 这个组成元素就是做此用途的.它看起来就像这样: <tscreen><verb> <verb> Some literal text to include as example output. </verb> </verb></tscreen> <tt>verb</tt> 环境不允许你在其内容中使用<em/任何东西/. 特别地,在 <tt>verb</tt> 环境中你必须: <itemize> <item>使用 <tt>&amp;</tt> 代表 <tt>&</tt> <item>使用 <tt>&lt;/</tt> 代表 <tt></</tt> <item>不要在 <tt>verb</tt> 环境中使用 <tt>\end{verbatim}</tt>, 因为这是 LaTeX 用来结束 <tt>verbatim</tt> 环境的. (未来应该可能完全的隐藏底层的文字编排,但目前的解析器还不支援.) </itemize> <tt>code</tt> 环境非常类似 <tt/verb/ 环境,除了在文字周围加入分隔线 <code> 这是 code 环境的例子. </code> 你应该在任何 <tt/verb/ 环境的周围使用 <tt/tscreen/ 环境,像这样: <tscreen><verb> <tscreen><verb> 这是一段例句. </verb></tscreen> </verb></tscreen> <tt/tscreen/ 是一个环境单纯地缩排并设定预设字型为 <tt/tt/. 这使得□例要论在 LaTeX 以及纯文字的版本中看起来好多了. 你可以使用 <tt/tscreen/ 而不加 <tt/verb/,不过,如果你在□例中使用任何的特殊字元那麽你就需要它们两个. <tt/tscreen/ 与特殊字元无关.□例请参阅 <tt/example.sgml/. <tt/quote/ 环境类似 <tt/tscreen/,除了不将预设字型设为 <tt/tt/.所以,你可以使用 <tt/quote/ 於与电脑无关的引用,如: <tscreen><verb> <quote> Here is some text to be indented, as in a quote. </quote> </verb></tscreen> 这会产生: <quote> Here is some text to be indented, as in a quote. </quote> <sect1>文件内容概观 <p> 在我们深入研究细节之前,我要开始介绍 linuxdoc DTD 定义的文件概观.文件如何设立的□例请仔细观看 <tt/example.sgml/. <sect2>序文 <p> 在文件的「序文」中你设立像是标题以及文件型态(style)的东西.Linux HOWTO 文件看起来应该像: <tscreen><verb> <!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> </verb></tscreen> 这些组成项目可以酌予增减但须按此顺序.第一行告诉 SGML 解析程式使用 linuxdoc DTD. <tt><article></tt> 这个标签规定文件使用「article」此种文件型态. (原先的 QWERTZ DTD 还定义 「report」以及「book」等型态;我并没有修改它们以在 SGML-Tools 中使用). <tt/title/, <tt/author/, 以及 <tt/date/ 这些标签的意义应该是很明显的, 在 <tt/date/ 标签中包含文件的版本编号以及最後修改时间. <tt/abstract/ 标签设定文件顶端<em/在内容之前/印出的文字. 如果你不想含入内容列表(<tt/toc/ 标签),那麽你可能不需要 <tt/abstract/. <sect2>章节与段落 <p> 在序文之後,你就可以准备进入文件本身.有下列的分节指令可以使用: <itemize> <item><tt/sect/: 最顶层的章节 (也就是 1, 2, 等等) <item><tt/sect1/: 第二层的次章节 (也就是 1.1, 1.2, 等等) <item><tt/sect2/: 第三层的小章节 <item><tt/sect3/: 第四层的小小节 <item><tt/sect4/: 第五层的小小小节 </itemize> 它们相当於 LaTeX 中对应的 <tt/section/, <tt/subsection/ 等等. 在 <tt/sect/ (或 <tt/sect/, <tt/sect/ 等等) 标签之後跟著是该节的名称. 例如,在文件的顶端,序文之後的是此标签: <tscreen><verb> <sect>简介 </verb></tscreen> 而在此节开始的地方(段落),有个标签是: <tscreen><verb> <sect2>段落 </verb></tscreen> 在一节的标签之後,你开始文件的主体.然而,你必须以一个 <tt><p></tt> 标签开始,像这样: <tscreen><verb> <sect>简介 <p> 这是一份 SGML-Tools 文件处理的使用者指引.... </verb></tscreen> 这是告诉解析程式你已完成一节的标题并且准备好开始本文主体. 其後,新的段落是以空白行开始(就如同 TeX).例如, <tscreen><verb> 这是第一段的结尾. 而我们从这里开始新的一段. </verb></tscreen> 没有什麽理由要在每个段落的前面使用 <tt><p></tt> 标签;只要在分节指令後面的第一个段落开始处加就行. <sect2>文件结尾 <p> 在文件结束的地方,你必须使用这个标签: <tscreen><verb> </article> </verb></tscreen> 以告诉解析程式你已经完成 <tt/article/ 这个组成元素(涵盖整份文件). </sect2> <sect1>交互参考<label id="cross-ref"> <p> 现在我们要进入系统的其它功能.交互参考很容易.例如,如果你想要制作某一节的交互参考,你得像这样标示该节: <tscreen><verb> <sect1>简介<label id="sec-intro"> </verb></tscreen> 接著你就可以在文件中的某个地方式用这个表示式参照该节: <tscreen><verb> 请参考<ref id="sec-intro" name="简介">一节的介绍. </verb></tscreen> 这将会以 <tt/sec-intro/ 标记的节号替换掉这个 <tt/ref/ 标签. 对於 groff 以及 HTML 转换 <tt/name/ 这个参数是必须的. SGML-Tools 使用的 groff 巨集设定目前并未支援交互参考,而且它常常以名称取代数字参照某一节. 例如,本节是<ref id="cross-ref" name="交互参考">. 在全球资讯网上使用的通用资源定位器,即 URL 也有组成元素 <tt/url/. 这个元素应该用来参照其它文件,FTP 上的档案等等.例如: <tscreen><verb> 你可从此取得 Linux HOWTO 文件 <url url="http://sunsite.unc.edu/mdw/HOWTO/" name="The Linux HOWTO INDEX">. </verb></tscreen> <tt/url/ 这个参数指定这个 URL 本身.连结会自动加入到 HTML 文件中. 可选用的 <tt/name/ 参数指定应该加上连结的文字(HTML 转换)或是为 URL 描述命名(LaTeX 或 groff).如果没有给 <tt/name/ 参数,会使用这个 URL 本身. 例如,你可以从这里取得 SGML-Tools 套件<newline> <tt><htmlurl url="ftp://sunsite.unc.edu/pub/Linux/utils/text/sgml-tools-0.99.0.tar.gz" name="ftp://sunsite.unc.edu/pub/Linux/utils/text/sgml-tools-0.99.0.tar.gz"></tt>. 一个有用的变形是 <tt/htmlurl/,除了 HTML 文件在其它每种文件中这个 URL 部份将不会出现. 它用在像是个人的电子邮件位址;你可以写 <tscreen><verb> <htmlurl url="mailto:esr@snark.thyrsus.com" name="esr@snark.thyrsus.com"> </verb></tscreen> 而在纯文字输出中获得「esr@snark.thyrsus.com」 而不是重复的「esr@snark.thyrsus.com <mailto:esr@snark.thyrsus.com>」 但是在 HTML 文件中仍然保有适当的 URL 部份. <sect1>字型 <p> 基本上,SGML-Tools 支援与 LaTeX 相同的字型. 注意,无论如何,纯文字的转换(经由 <tt/groff/)不理会有关字型的资讯. 所以,你可以尽可能的使用多种字型,这对 LaTeX 的转换会有好处. 但是在纯文字的版本中不要指望能用字型点出重点. 特别是,前面描述过的 <tt/tt/ 这个标签可以用来获致宽度固定的「打字机」字型, 这应该用在所有的电子邮递位址,机器名称,档案名称等等. 例如: <tscreen><verb> Here is some <tt>typewriter text</tt> to be included in the document. </verb></tscreen> 相当於: <tscreen><verb> Here is some <tt/typewriter text/ to be included in the document. </verb></tscreen> 记得如果被包含的文字不含有斜线你可以使用简略形式. 其它的字型有 <bf/粗体字/ 用的 <tt/bf/ 以及 <em/斜体字/ 用的 <tt/em/. 另外还支援数种字型,但是我不建议你使用它们,因为它们会被转换成像 HTML 不支援的字型. 粗体,打字机体,以及斜体应该能满足你的需要. <sect1>列表 <p> 此系统支援数种不同的列表.它们是: <itemize> <item><tt/itemize/ 像这样的告示列表 <item><tt/enum/ 数字列表 <item><tt/descrip/ 描述列表 </itemize> 在 <tt/itemize/ 或是 <tt/enum/ 里的项目必须以 <tt/item/ 标签加以标示. 在 <tt/descrip/ 里的项目必须以 <tt/tag/ 标示. 例如, <tscreen><verb> <itemize> <item>这是一个项目. <item>这是第二个项目. </itemize> </verb></tscreen> 看起来像是这样: <itemize> <item>这是一个项目. <item>这是第二个项目. </itemize> 在 <tt/enum/ 中 <tscreen><verb> <enum> <item>这是第一个项目. <item>这是第二个项目. </enum> </verb></tscreen> 你应看得出来,列表可以是巢状的.细节请参阅□例文件. <tt/descrip/ 列表稍有不同,而且有点难看,但是在某些情况下你可能会想使用它: <tscreen><verb> <descrip> <tag/Gnats./ Annoying little bugs that fly into your cooling fan. <tag/Gnus./ Annoying little bugs that run on your CPU. </descrip> </verb></tscreen> 最後看起来像: <descrip> <tag/Gnats./ Annoying little bugs that fly into your cooling fan. <tag/Gnus./ Annoying little bugs that run on your CPU. </descrip> <sect1>更进一步的资讯 <p> <enum> <item>QWERTZ 使用者指引可以从这里取得 <tt><htmlurl url="ftp://ftp.cs.cornell.edu/pub/mdw/SGML" name="ftp://ftp.cs.cornell.edu/pub/mdw/SGML"></tt>. QWERTZ (以及 SGML-Tools) 还支援像是数学公式,表格,图形等许多特性. 如果你想用 SGML 写一般的文件,我建议你用原来的 QWERTZ DTD 而不要用修改过的 linuxdoc DTD, 因为这是我特别用来写 Linux HOWTOs 及其它类似文件用的. <item>Tom Gordon 的 QWERTZ tools 可在此找到: <tt><htmlurl url="ftp://ftp.gmd.de/GMD/sgml" name="ftp://ftp.gmd.de/GMD/sgml"></tt>. <item>更多关於 SGML 的资讯可以在下面这些网页找到: <itemize> <item><tt><url url="http://www.w3.org/hypertext/WWW/MarkUp/SGML/" name="SGML and the Web"></tt> <item><tt><url url="http://www.sil.org/sgml/sgml.html" name="SGML Web Page"></tt> <item><tt><url url="http://www.yahoo.com/Computers_and_Internet/Information_and_Documentation/Data_Formats/SGML/" name="Yahoo's SGML Page"></tt> </itemize> <item>James Clark 的 <tt/sgmls/ 解析器,及後来的 <tt/nsgmls/ 还有其它工具可在这找到: <tt><htmlurl url="ftp://ftp.jclark.com" name="ftp://ftp.jclark.com"> </tt> 以及 <tt><url url="http://www.jclark.com" name="James Clark's WWW Page"></tt>. <item><tt/emacs psgml/ 可在此找到: <tt><htmlurl url="ftp://ftp.lysator.liu.se/pub/sgml" name="ftp://ftp.lysator.liu.se/pub/sgml"></tt>.这个工具提供许多 SGML 的功能. <item>你可以寄电子邮件到 <tt><htmlurl url="mailto:majordomo@via.ecp.fr" name="majordomo@via.ecp.fr"></tt> 以参与 SGML-Tools mailing list,内容写 <tt/subscribe sgml-tools/. Mailing list 的地址是 <tt><htmlurl url="mailto:sgml-tools@via.ecp.fr" name="sgml-tools@via.ecp.fr"></tt>. <item>关於 <tt>LyX</tt> 的更多资讯可以在此找到: <tt><url url="http://wsiserv.informatik.uni-tuebingen.de/~ettrich/" name="LyX WWW Page"></tt>. <tt/LyX/ 是一个给 LaTeX 用的高阶文字处理器前端. 具半所见即所得界面,会自动产生许多 LaTeX 的样式及格局. 可以增快 LaTeX 的学习而且使复杂的格局变简单且直接. </enum> </article>