4. 使用 DocBook

现在所有东西都已安装完毕,是时候测试一下并了解如何使用 openjade 和其他工具了。

图 1. DocBook SGML 文件示例 -test.sgml

<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN">

<article lang="en">
<articleinfo>
	<title>This is a Test</title>

	<author>
		<firstname>John</firstname>
		<surname>Doe</surname>
		<othername role="mi">L</othername>
		<affiliation>
			<address>
			<email>j.doe@jdoe dot com</email>
			</address>
		</affiliation>
	</author>

	<revhistory>
		<revision>
		<revnumber>v1.0</revnumber>
		<date>2000-12-30</date>
		<authorinitials>jld</authorinitials>
		</revision>
	</revhistory>

	<abstract>
	<para>
	This is a test DocBook document.
	</para>
	</abstract>

</articleinfo>

<sect1 id="test1">
<title>Test 1</title>
<para>
Test section 1.
</para>
	<sect2>
	<title>Test 1.1</title>
	<para>
	Test section 1.1
	</para>
	</sect2>

	<sect2>
	<title>Test 1.2</title>
	<para>
	<screen>
		-- Test section 1.2
		openjade -t sgml -d $DSLFILE test.sgml
	</screen>
	</para>
	</sect2>

</sect1>

<sect1 id="test2">
<title>Test 2</title>
<para>
Test section 2.
</para>

	<sect2>
	<title>Test 2.1</title>
	<para>
	Test section 2.1
	</para>
	</sect2>

	<sect2>
	<title>Test 2.2</title>
	<para>
	Test section 2.2
	</para>
	</sect2>

</sect1>
</article>
	
有关 DocBook 指南和 DocBook 元素参考,请参阅

DocBook:权威指南。 http://www.docbook.org/tdg/en/

4.1. 生成 HTML

4.1.1. docbook.dsl

图 2. 使用以下命令生成 HTML 输出docbook.dsl

bash$ ls -l
total 4
-rw-r--r--   1 reaster  users        1077 Dec 31 16:25 test.sgml
bash$ echo $SGML_SHARE
/usr/local/share/sgml
bash$ openjade -t sgml -d $SGML_SHARE/dsssl/docbook/html/docbook.dsl test.sgml
[snip - DTDDECL catalog entries are not supported, repeats]
bash$ ls -l
total 12
-rw-r--r--   1 reaster  users        1885 Dec 31 17:34 t1.htm
-rw-r--r--   1 reaster  users        1077 Dec 31 16:25 test.sgml
-rw-r--r--   1 reaster  users        1544 Dec 31 17:34 x27.htm
bash$
	
关于DTDDECL的警告可以忽略。 它们可能有点烦人,但当使用 openjade 时,这些警告是正常的。 应该查看其他警告和错误,它们通常指示您应该修复的语法错误。

两个htm文件被生成,每个<sect1>一个文件。 文件名不是很具描述性。 第一节与文章信息出现在同一页面上。 这些是使用 Modular DocBook Stylesheets 附带的默认样式表的结果,docbook.dsl.

可以自定义样式表以改进这些默认设置。 如果您下载了 Linux 文档项目ldp.dsl文件并按照第 3.3 节所示安装了它,那么您已经有一个可用的自定义样式。

4.1.2. ldp.dsl

图 3. 使用以下命令生成 HTML 输出ldp.dsl

bash$ openjade -t sgml -d $SGML_SHARE/dsssl/docbook/html/ldp.dsl#html test.sgml
bash$ ls -l
total 16
-rw-r--r--   1 reaster  users        2006 Dec 31 18:00 index.html
-rw-r--r--   1 reaster  users        1077 Dec 31 16:25 test.sgml
-rw-r--r--   1 reaster  users        1677 Dec 31 18:00 test1.html
-rw-r--r--   1 reaster  users        1598 Dec 31 18:00 test2.html
bash$
	

使用ldp.dsl, 输出看起来更好

  • 已创建一个索引文件,其中包含文章信息。

  • 目录已自动生成。

  • 每个<sect1>都在其自己的文件中。

  • 文件名从<sect1>元素的 ID 属性派生。

  • 文件扩展名已更改为html.

  • The<screen>元素被着色。

请注意ldp.dsl文件是如何在命令行中编写的:它附加了“#html”。ldp.dsl包含两个<STYLE-SPECIFICATION>元素,一个 ID="html" 另一个 ID="print"。 这从 ldp.dsl 中选择html样式。 DocBook DSSSL 包含将 DocBook 文件转换为html和打印格式的支持。 在第 3.3 节中,我们将ldp.dsl复制到打印和html目录中。 当生成html输出时,应该像上面那样选择html样式。 当生成其他类型的文件时,例如rtftex,它们属于打印样式,因此应该从ldp.dsl中选择打印样式。 另一种方法是注释掉或删除打印或htmlldp.dsl各自目录的副本中的样式。 如果一个dsl文件中有多个样式规范,并且像上面的示例中一样没有选择任何样式,则选择文件中遇到的第一个样式。 对于ldp.dsl,打印样式规范是文件中的第一个,因此默认情况下会选择它。 因此,在上面的示例中,如果不附加“#html” 当指定ldp.dsl作为 dsssl 样式表时,“print”样式规范将被选择并在生成html输出时使用。 它会工作,但旨在选择print/ldp.dsl,并且格式将有所不同。

要了解有关样式表自定义文件如何制作的更多信息,请阅读 Modular DocBook Stylesheets 的文档。 自定义主要涉及设置布尔选项参数以切换样式功能的开启和关闭。 可以使用 DSSSL 语言对全新的样式逻辑进行编程。

openjade 选项“-t output_type”指定输出类型。“-d dsssl_spec”选项是要使用的 dsssl 样式表的路径。 在上面的示例中,指定的输出类型是 sgml,用于 SGML 到 SGML 的转换。 HTML,由 HTML 文档类型定义 (DTD) 定义,是一种 SGML 文档类型,就像 DocBook 一样,因此“sgml”是正确的 output_type 选项。 常用的另外两种输出类型是“rtf”和“tex”。 tex 输出类型稍后将用作生成pdfps格式的中间格式。 dsssl_spec 必须指定一个dsl文件,而不是目录。

4.2. 生成 rtf 和 tex

bash$ ls -l
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
bash$ openjade -t rtf -d $SGML_SHARE/dsssl/docbook/print/ldp.dsl#print test.sgml
bash$ openjade -t tex -d $SGML_SHARE/dsssl/docbook/print/ldp.dsl#print test.sgml
bash$ ls -l
-rw-r--r--   1 reaster  users        4584 Dec 31 20:51 test.rtf
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
-rw-r--r--   1 reaster  users       18719 Dec 31 20:51 test.tex
	

4.3. 生成 dvi 和 ps

图 4. 运行 jadetex 生成设备无关 (dvi) 文件。

-rw-r--r--   1 reaster  users        4584 Dec 31 20:51 test.rtf
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
-rw-r--r--   1 reaster  users       18719 Dec 31 20:51 test.tex
bash$ jadetex test.tex
This is TeX, Version 3.14159 (Web2C 7.3.1)
(test.tex
JadeTeX 1999/06/29: 2.7
(/usr/share/texmf/tex/latex/psnfss/t1ptm.fd)
(/usr/share/texmf/tex/jadetex/isoents.tex)
Elements will be labelled
Jade begin document sequence at 19
No file test.aux.
(/usr/share/texmf/tex/latex/cyrillic/ot2cmr.fd)
(/usr/share/texmf/tex/latex/base/ts1cmr.fd)
(/usr/share/texmf/tex/latex/lucidabr/lmrhlcm.fd)
(/usr/share/texmf/tex/latex/hyperref/nameref.sty)
(/usr/share/texmf/tex/latex/psnfss/t1phv.fd)

LaTeX Warning: Reference `TEST1' on page 1 undefined on input line 238.


LaTeX Warning: Reference `20' on page 1 undefined on input line 262.


LaTeX Warning: Reference `23' on page 1 undefined on input line 285.


LaTeX Warning: Reference `TEST2' on page 1 undefined on input line 316.


LaTeX Warning: Reference `30' on page 1 undefined on input line 340.


LaTeX Warning: Reference `33' on page 1 undefined on input line 363.

[1.0.46] (/usr/share/texmf/tex/latex/psnfss/t1pcr.fd) [2.0.46] [3.0.46]
(test.aux)

LaTeX Warning: There were undefined references.

 )
Output written on test.dvi (3 pages, 34984 bytes).
Transcript written on test.log.
bash$ ls -l
total 80
-rw-r--r--   1 reaster  users         771 Dec 31 20:55 test.aux
-rw-r--r--   1 reaster  users       34984 Dec 31 20:55 test.dvi
-rw-r--r--   1 reaster  users        5072 Dec 31 20:55 test.log
-rw-r--r--   1 reaster  users        4584 Dec 31 20:51 test.rtf
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
-rw-r--r--   1 reaster  users       18719 Dec 31 20:51 test.tex
bash$ jadetex test.tex
This is TeX, Version 3.14159 (Web2C 7.3.1)
(test.tex
JadeTeX 1999/06/29: 2.7
(/usr/share/texmf/tex/latex/psnfss/t1ptm.fd)
(/usr/share/texmf/tex/jadetex/isoents.tex)
Elements will be labelled
Jade begin document sequence at 19
(test.aux) (/usr/share/texmf/tex/latex/cyrillic/ot2cmr.fd)
(/usr/share/texmf/tex/latex/base/ts1cmr.fd)
(/usr/share/texmf/tex/latex/lucidabr/lmrhlcm.fd)
(/usr/share/texmf/tex/latex/hyperref/nameref.sty)
(/usr/share/texmf/tex/latex/psnfss/t1phv.fd) [1.0.46]
(/usr/share/texmf/tex/latex/psnfss/t1pcr.fd) [2.0.46] [3.0.46] (test.aux) )
Output written on test.dvi (3 pages, 34148 bytes).
Transcript written on test.log.
You have new mail in /var/spool/mail/reaster
bash$ ls -l
total 80
-rw-r--r--   1 reaster  users         753 Dec 31 20:58 test.aux
-rw-r--r--   1 reaster  users       34148 Dec 31 20:58 test.dvi
-rw-r--r--   1 reaster  users        4433 Dec 31 20:58 test.log
-rw-r--r--   1 reaster  users        4584 Dec 31 20:51 test.rtf
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
-rw-r--r--   1 reaster  users       18719 Dec 31 20:51 test.tex
bash$
	

第一次运行 jadetex 时,会打印警告。 它们可以忽略。 再次运行时,它们不会再次出现。

图 5. 运行 dvips 生成 PostScript (ps) 文件。

bash$ ls -l
total 80
-rw-r--r--   1 reaster  users         753 Dec 31 20:58 test.aux
-rw-r--r--   1 reaster  users       34148 Dec 31 20:58 test.dvi
-rw-r--r--   1 reaster  users        4433 Dec 31 20:58 test.log
-rw-r--r--   1 reaster  users        4584 Dec 31 20:51 test.rtf
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
-rw-r--r--   1 reaster  users       18719 Dec 31 20:51 test.tex
bash$ dvips test.dvi
This is dvips(k) 5.86 Copyright 1999 Radical Eye Software (www.radicaleye.com)
' TeX output 2000.12.31:2058' -> test.ps
<texc.pro><8r.enc><texps.pro><special.pro><color.pro>. [1] [2] [3]
bash$ ls -l
total 116
-rw-r--r--   1 reaster  users         753 Dec 31 20:58 test.aux
-rw-r--r--   1 reaster  users       34148 Dec 31 20:58 test.dvi
-rw-r--r--   1 reaster  users        4433 Dec 31 20:58 test.log
-rw-r--r--   1 reaster  users       34817 Dec 31 21:06 test.ps
-rw-r--r--   1 reaster  users        4584 Dec 31 20:51 test.rtf
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
-rw-r--r--   1 reaster  users       18719 Dec 31 20:51 test.tex
bash$
	

图 6. 运行 htmldoc 生成 PostScript (ps) 文件。

bash$ ls -l
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
bash$ export DSL_HTML=$SGML_SHARE/dsssl/docbook/html/ldp.dsl\#html
bash$ openjade -t sgml -V nochunks -d $DSL_HTML test.sgml | htmldoc -f test-htmldoc.ps -
bash$ ls -l
-rw-r--r--   1 reaster  users        9050 Jan  1 00:44 test-htmldoc.ps
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
bash$
	
如果ps文件未按预期显示,则可能是由于 htmldoc 中的错误。 如果你想使用 ldp_print 脚本来制作ps.

,请查看脚本内部。

4.4. 生成 pdfpdf) 文件。

bash$ ls -l
-rw-r--r--   1 reaster  users         753 Dec 31 20:58 test.aux
-rw-r--r--   1 reaster  users       34148 Dec 31 20:58 test.dvi
-rw-r--r--   1 reaster  users        4433 Dec 31 20:58 test.log
-rw-r--r--   1 reaster  users       34817 Dec 31 21:06 test.ps
-rw-r--r--   1 reaster  users        4584 Dec 31 20:51 test.rtf
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
-rw-r--r--   1 reaster  users       18719 Dec 31 20:51 test.tex
bash$ pdfjadetex test.tex
This is pdfTeX, Version 3.14159-13d (Web2C 7.3.1)
(test.tex[/usr/share/texmf/pdftex/config/pdftex.cfg]
JadeTeX 1999/06/29: 2.7
(/usr/share/texmf/tex/latex/psnfss/t1ptm.fd)
(/usr/share/texmf/tex/jadetex/isoents.tex)
Elements will be labelled
Jade begin document sequence at 19
(test.aux) (/usr/share/texmf/tex/latex/cyrillic/ot2cmr.fd)
(/usr/share/texmf/tex/latex/base/ts1cmr.fd)
(/usr/share/texmf/tex/latex/lucidabr/lmrhlcm.fd)
(/usr/share/texmf/tex/context/base/supp-pdf.tex
(/usr/share/texmf/tex/context/base/supp-mis.tex
loading : Context Support Macros / Missing
)
loading : Context Support Macros / PDF
) (/usr/share/texmf/tex/latex/hyperref/nameref.sty)
(/usr/share/texmf/tex/latex/psnfss/t1phv.fd) [1.0.46[/usr/share/texmf/dvips/con
fig/pdftex.map]] (/usr/share/texmf/tex/latex/psnfss/t1pcr.fd) [2.0.46] [3.0.46]
 (test.aux) )<8r.enc>
Output written on test.pdf (3 pages, 9912 bytes).
Transcript written on test.log.
bash$ ls -l
total 128
-rw-r--r--   1 reaster  users         753 Dec 31 21:13 test.aux
-rw-r--r--   1 reaster  users       34148 Dec 31 20:58 test.dvi
-rw-r--r--   1 reaster  users        5075 Dec 31 21:13 test.log
-rw-r--r--   1 reaster  users        9912 Dec 31 21:13 test.pdf
-rw-r--r--   1 reaster  users       34817 Dec 31 21:06 test.ps
-rw-r--r--   1 reaster  users        4584 Dec 31 20:51 test.rtf
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
-rw-r--r--   1 reaster  users       18719 Dec 31 20:51 test.tex
bash$
bash$ pdfjadetex test.tex
[snip]
bash$ pdfjadetex test.tex
[snip]
	
图 7. 运行 pdfjadetex 生成可移植文档格式 (

pdfjadetex 必须运行最多三次才能解决所有内部引用,例如 TOC 页码。pdf) 文件。

bash$ ls -l
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
bash$ export DSL_HTML=$SGML_SHARE/dsssl/docbook/html/ldp.dsl\#html
bash$ openjade -t sgml -V nochunks -d $DSL_HTML test.sgml > test-htmldoc.htm
bash$ ldp_print test-htmldoc.htm
bash$ ls -l
-rw-r--r--   1 reaster  users        9050 Jan  1 01:17 test-htmldoc.pdf
-rw-r--r--   1 reaster  users        1143 Dec 31 18:18 test.sgml
bash$
	
图 8. 运行 htmldoc 生成可移植文档格式 (ps如果在 ldp_print 脚本中启用,这也将生成一个

文件。

4.5. 使用 make

重复命令来生成输出文件很繁琐。 make 命令非常适合自动化此过程。图 9. 文件名Makefile

# Generates online and print versions of SGML source file.

BASENAME=DocBook-Install

# SGML source file.
SGML_FILE=$(BASENAME).sgml

# Stylesheets
DSL_PRINT=$(SGML_SHARE)/dsssl/docbook/print/ldp.dsl\#print
DSL_HTML=$(SGML_SHARE)/dsssl/docbook/html/ldp.dsl\#html

# Generated files.
HTML_FILE=index.html
HTM_FILE=$(BASENAME).htm
TEX_FILE=$(BASENAME).tex
RTF_FILE=$(BASENAME).rtf
PDF_FILE=$(BASENAME).pdf
DVI_FILE=$(BASENAME).dvi
PS_FILE=$(BASENAME).ps


# Build rules.

html: $(HTML_FILE)

htm: $(HTM_FILE)

tex: $(TEX_FILE)

rtf: $(RTF_FILE)

pdf: $(PDF_FILE)

dvi: $(DVI_FILE)

ps: $(PS_FILE)

all: html htm tex rtf pdf dvi ps

clean:
	rm -f $(BASENAME).{htm,log,aux,ps,pdf,tex,dvi,rtf,fot}
	rm -f *.html

distclean: clean
	rm -f $(BASENAME).tgz

package:
	rm -f $(BASENAME).tgz
	tar -C .. -czf /tmp/$(BASENAME).tgz $(BASENAME)
	mv /tmp/$(BASENAME).tgz .

dist: clean package

distall: all package


# Compile rules.

$(HTML_FILE): $(SGML_FILE)
	openjade -t sgml -d $(DSL_HTML) $(SGML_FILE)

$(HTM_FILE): $(SGML_FILE)
	openjade -t sgml -V nochunks -d $(DSL_HTML) \
	$(SGML_FILE) > $(HTM_FILE)

$(TEX_FILE): $(SGML_FILE)
	openjade -t tex -d $(DSL_PRINT) $(SGML_FILE)

$(RTF_FILE): $(SGML_FILE)
	openjade -t rtf -d $(DSL_PRINT) $(SGML_FILE)

# [pdf]jadetex is run 3 times to resolve references.
#$(PDF_FILE): $(TEX_FILE)
#	pdfjadetex $(TEX_FILE)
#	pdfjadetex $(TEX_FILE)
#	pdfjadetex $(TEX_FILE)

# This *should* work, but htmldoc has bugs ...
#$(PDF_FILE): $(SGML_FILE)
#	openjade -t sgml -V nochunks -d $(DSL_HTML) \
#	$(SGML_FILE) | htmldoc -f $(PDF_FILE) -

# Have to use ldp_print to work around htmldoc bugs
# ldp_print can also do the ps file - see script
$(PDF_FILE): $(HTM_FILE)
	ldp_print $(HTM_FILE)

$(DVI_FILE): $(TEX_FILE)
	jadetex $(TEX_FILE)
	jadetex $(TEX_FILE)
	jadetex $(TEX_FILE)

$(PS_FILE): $(DVI_FILE)
	dvips $(DVI_FILE)

#$(PS_FILE): $(SGML_FILE)
#	openjade -t sgml -V nochunks -d $(DSL_HTML) \
#	$(SGML_FILE) | htmldoc -f $(PS_FILE) -
	

- 自动化文档生成。

用法就像大多数项目一样图 9. 文件名

		-- generate html (default)
		make
		-- generate just pdf
		make pdf
		-- generate all files
		make all
		-- delete all generated files
		make clean
		-- create tgz distribution
		-- with no generated files
		make dist
		-- create tgz distribution
		-- containing all generated files
		make distall
	

图 10. 调用 make 来运行pdfps请注意注释掉的

的编译规则,它们提供了生成这些文件的替代方法。

4.6. 生成 man 页面在关于安装所有内容的章节中,我们安装了 perl 版本 5 模块SGMLS.pm。 然后我们安装了 Docbook2X,它提供了spec.pl文件,用于使用 sgmlspl 将 DocBook<refentry>

文档转换为 nroff (man 页面) 格式。文件,用于使用 sgmlspl 将 DocBook下面给出了一个 foo 命令的 Docbook 示例

文档。文件,用于使用 sgmlspl 将 DocBook图 11. foo 命令 man 页面,docbook源文件 ()

<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
<refentry>
<refentryinfo>
	<date>2001-01-01</date>
</refentryinfo>
<refmeta>
	<refentrytitle>
		<application>foo</application>
	</refentrytitle>
	<manvolnum>1</manvolnum>
	<refmiscinfo>foo 1.0</refmiscinfo>
</refmeta>
<refnamediv>
	<refname>
		<application>foo</application>
	</refname>
	<refpurpose>
	Does nothing useful.
	</refpurpose>
</refnamediv>
<refsynopsisdiv>
	<refsynopsisdivinfo>
		<date>2001-01-01</date>
	</refsynopsisdivinfo>
	<cmdsynopsis>
	<command>foo</command>
<arg><option>-f </option><replaceable class="parameter">bar</replaceable></arg>
<arg><option>-d<replaceable class="parameter">n</replaceable></option></arg>
<arg rep="repeat"><replaceable class="parameter">file</replaceable></arg>
	</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
	<refsect1info>
		<date>2001-01-01</date>
	</refsect1info>
	<title>DESCRIPTION</title>
	<para>
	<command>foo</command> does nothing useful.
	</para>
</refsect1>
<refsect1>
	<title>OPTIONS</title>
	<variablelist>
	<varlistentry>
		<term>-f <replaceable class="parameter">bar</replaceable></term>
		<listitem>
			<para>
			Takes <filename>bar</filename> as it's run
			control file. If this were a real program,
			there might be more to say here about what
			bar is and how it will be used.
			</para>
		</listitem>
	</varlistentry>
	<varlistentry>
		<term>-d<replaceable class="parameter">n</replaceable></term>
		<listitem>
			<para>
			Do something, where integer
			<replaceable class="parameter">n</replaceable>
			specifies how many times.
			</para>
		</listitem>
	</varlistentry>
	<varlistentry>
		<term><replaceable class="parameter">file...</replaceable></term>
		<listitem>
			<para>
			Processes the files in the order listed,
			sending all output to stdout.
			</para>
		</listitem>
	</varlistentry>
	</variablelist>
</refsect1>
<refsect1>
	<title>USAGE</title>
	<para>
	<command>foo</command> -f foo.conf -d2 foodata.foo
	</para>
</refsect1>
<refsect1>
	<title>CAVEATS</title>
	<para>
	Other programs named <command>foo</command> may exist and actually
	do something!
	</para>
</refsect1>
<refsect1>
	<title>BUGS</title>
	<para>
	None.  Program does nothing.
	</para>
</refsect1>
<refsect1>
	<title>AUTHOR</title>
	<para>
	<author>
		<firstname>Foo</firstname>
		<othername role="mi">E</othername>
		<surname>Bar</surname>
		<contrib>Original author</contrib>
	</author>
	</para>
</refsect1>
</refentry>
	

foo-ref.sgml图 12. 使用 onsgmls, sgmlspl

bash$ ls -l
-rw-r--r--   1 reaster  users        2434 Jan  3 03:51 foo-ref.sgml
bash$ onsgmls foo-ref.sgml | sgmlspl $SGML_SHARE/docbook2X/docbook2man-spec.pl
bash$ ls -l
-rw-r--r--   1 reaster  users        2434 Jan  3 03:51 foo-ref.sgml
-rw-r--r--   1 reaster  users        1129 Jan  3 04:03 foo.1
-rw-r--r--   1 reaster  users           0 Jan  3 04:03 manpage.links
-rw-r--r--   1 reaster  users           0 Jan  3 04:03 manpage.log
-rw-r--r--   1 reaster  users          15 Jan  3 04:03 manpage.refs
bash$ groff -mandoc -Tascii foo.1

FOO(1)                                                     FOO(1)


NAME
       foo - Does nothing useful.

SYNOPSIS
       foo [ -f bar ]  [ -dn ]  [ file... ]

DESCRIPTION
       foo does nothing useful.

OPTIONS
       -f bar Takes  bar as its run control file. If this were a
              real program, there might be more to say here about
              what bar is and how it will be used.

       -dn    Do  something,  where  integer n specifies how many
              times.

       file...
              Processes the files in the  order  listed,  sending
              all output to stdout.

USAGE
       foo -f foo.conf -d2 foodata.foo

CAVEATS
       Other  programs  named foo may exist and actually do some-
       thing!

BUGS
       None. Program does nothing.

AUTHOR
       Foo E Bar (Original author)

[snip - several extra blank lines that man would not show]
foo 1.0                     2001-01-01                          1
bash$ groff -mandoc -Tascii foo.1 | less
bash$ less foo.1
	

docbook2man-spec.pl生成 man 页面,foo.1

,被生成为第 1 节页面。 groff 命令用于快速查看其格式化外观。安装man 页面,它属于任何man/man1目录,其中目录man/被添加到$MANPATH环境变量中。 标准位置是/usr/local/man/man1

man 页面系统中的标准节是 1 到 9。 每个节都用于保存特定类别的文档。

表 1. 手册页节
用途man1
用户程序man2
系统调用man3
库函数和子例程man4
设备man5
文件格式man6
游戏man7
杂项man8
系统管理man9

Tip

内核内部变量和函数源文件 (man 页面的源文件,如html,可以像任何其他 DocBook 文件一样处理成所有其他格式。 因此,使用前面讨论的相同命令来生成htmlrtf, tex, pdf, 和打印输出类型,man 页面可以被制作为dvips,和

。 这真的可以节省大量转换工作!