我想知道是否可以使用该texi2pdf
程序编译原始 TeX 代码。
答案1
Texinfo
是另一个宏包,它定义了自己的标记语言,可以由 TeX 处理以生成 dvi(texi2dvi)或 pdf(texi2pdf)。您可以在和@iftex
命令中包含任意(大致为纯文本)TeX 代码@end iftex
;但是,此条件中的任何内容在转换为其他格式(html、info 等)时都将被忽略。texi2[dvi|pdf]
是自动处理 Texinfo 文件以生成可打印文档的 shell 脚本,类似于makeinfo
,例如,一个处理相同文档以生成 info 或 html 格式的在线文档的程序。
texi2pdf
还可以通过检查文件扩展名来自动处理 LaTeX 文件。因此,texi2pdf filename.tex
会自动将filename.tex
其作为 LaTeX 文件处理,并附带其主要副产品(bibtex 和 makeindex)。
您可以采用texi2pdf
Fran 建议的策略来处理 Plain TeX 文件;但这样一来,您只能强制脚本texi2pdf
使用Plain TeX 文件格式pdftex
的引擎pdftex
,结果与使用命令相同pdftex filename.tex
。
答案2
你的问题不太清楚。据我了解,你问的是是否可以.tex
使用texi2pdf
无需安装 TeX 发行版。
这个问题的答案是,你不能,因为它texi2pdf
只是作为一个包装器,依赖于 TeX 发行版提供的编译命令的可用性。
请注意,我之所以以这种方式解释你的问题,而不是像其他人那样解释,是因为我目前无法想象有任何其他动机。也就是说,如果你安装了 TeX 发行版,你可能很快就会使用pdftex
或pdflatex
编译.tex
文件:使用提供的包装器的唯一原因texinfo
是你正在处理.texi
文件而不是一.tex
。
因此,虽然可能可以用它texi2pdf
来编译.tex
文件,但很难理解为什么有人会这样做。
基本包装器是texi2dvi
。texi2pdf
是一种简写,可以使用 pdfTeX 引擎代替标准 TeX 引擎。
texi2dvi
根据文档,对文件进行运行.texi
相当于以下 5 个步骤:
在 Texinfo 文件上运行“tex”。这将生成一个 DVI 文件(带有未定义的交叉引用且没有索引)和原始索引文件(带有两个字母的扩展名)。
在原始索引文件上运行“texindex”。这将创建相应的排序索引文件(带有三个字母的扩展名)。
再次对 Texinfo 文件运行“tex”。这会重新生成 DVI 文件,这次带有索引和定义的交叉引用,但带有上次运行的交叉引用的页码,这通常是不正确的。
使用“texindex”对索引再次排序。
最后运行 'tex'。这一次,交叉引用的页码已正确写入。
步骤 1、3 和 5 至少需要安装 TeX。(如果您正在处理文件.tex
,我认为步骤 2 和 4 不适用。)
答案3
根据man texi2pdf
处理(电子)纯 TeX 文件,必须设置环境变量。对于使用或 的LATEX=tex
DVI 输出,这是正确的,以使用引擎而不是,但对于 PDF 输出,设置实际上应该是 通过更改引擎。因此,在 Linux 系统中,纯 TeX 文件如下texi2dvi
texi2pdf --dvi
etex
latex
PDFLATEX=pdftex
pdflatex
pdftex
test.tex
,程序可以是:
$ PDFLATEX=pdftex ; export PDFLATEX ; texi2pdf test.tex
或者,告知程序源代码是一个 TeXinfo 文件,无论.tex
扩展名是什么:
$ texi2pdf --language=texinfo test.tex
或者更棘手的是,更改扩展名。不一定是 texinfo 文件的扩展名(.texi
),因为没有 的名称.tex
不会被识别为 LaTeX 文件,将被视为 texinfo 文件,无论有任何其他后缀(或者即使没有任何后缀)。因此,您可以将其命名为test.foo
。
在 Linux 中,可以使用硬链接为同一个文件维护多个名称,因此您可以保留原始文件名 test.tex
,但使用test.foo
以下命令进行编译texi2pdf
:
$ ln test.tex test.foo
$ texi2pdf test.foo
正如另一个答案所解释的那样,以这种方式欺骗程序是可行的,因为 TeXinfo 文件基于纯 TeX,因此使用相同的引擎,但您可能会使用误导性或非标准后缀欺骗自己。