源 latex 文件开头的 %&latex 的作用

源 latex 文件开头的 %&latex 的作用

%&latex有人可以解释一下在源 LaTeX 文件中命令之前放置的哪个命令的作用是什么吗\begin{document}

答案1

在古代,TeX 有两种形式:initexvirtex。第一个二进制文件用于创造格式有 Plain 和 LaTeX 等,第二种格式用于在加载其中一种可用格式后排版文档。

所以我们必须这样做

initex lplain

并将创建的文件保存lplain.fmt在合适的目录中;从那时起,就可以使用

virtex '&lplain' file

当然,许多用户或系统管理员定义了别名,以便可以简单地调用

latex file

多年来,人们发明了几种简化格式选择的技巧。例如,有些系统会进行内存转储,initex而不是执行\dump,这样转储就可以变成可执行文件,从而加快运行的启动速度。

另一个技巧是允许 TeX 解析第一个输入文件的第一行,因此如果文件是

%&latex
\documentclass{article}
\begin{document}
The Mad Hatter and the White Hare.
\end{document}

一个简单的电话

tex file

相当于tex '&latex' file。是的,在更近的时代,不是virtex调用可执行文件tex,而是使用 创建 LaTeX 格式initex latex.ltx,因此生成的格式是latex.fmt

当前的 TeX 发行版也提供这种“首行解析”。我不确定 MiKTeX 的状态如何(我知道它允许指定更多选项)。

TeX Live 发行版使用不同的策略;当创建格式(使用脚本mktexfmt-sys)时,例如pdflatex,符号链接

pdftex -> pdflatex

在二进制目录中创建;这是我的系统上的内容:

lrwxr-xr-x  1 root  wheel  6 Apr 20  2013 /usr/texbin/pdflatex@ -> pdftex

这使其pdflatex成为“可执行文件”,但pdftex实际上已经运行;程序能够知道它被调用的名称,并在加载格式时执行适当的操作。

那么,如果你有上述文件并运行命令行,会发生什么情况

pdflatex file

没有其他选择?“第一行解析”处于活动状态,因此这将覆盖基于调用名称的格式选择,并latex选择格式,以 DVI 格式而不是 PDF 格式产生输出。

所以,最好的办法是不是使用该格式的第一行。至少会造成混淆。

您可以查看 TeX Live 的文档以了解更多信息:

http://texdoc.net./texmf/doc/texlive/texlive-en/texlive-en.pdf

发现这个选项甚至没有描述。pdftex 的手册页有

-parse-first-line
如果主输入文件的第一行以%&解析开头,则查找转储名称或-translate-file选项。

-no-parse-first-line
禁用对主输入文件第一行的解析。

[...]

-translate-file tcxname
使用 tcxname 转换表来设置输入字符的映射和输出字符的重新映射。如果您有个人特殊格式并且不想费心创建别名或符号链接,此功能非常有用。

TeX Live 手册对 TCX 文件进行了一些讨论,但它们主要只是过去的遗物。

可以在运行时通过调用关闭该功能

pdftex -no-parse-first-line

pdftex(可以使用指向的任何符号链接)。请注意,该功能已关闭离开默认情况下使用tex(即原始的 Knuth TeX,无法生成 PDF 输出)。标准texmf.cnf文件中的相关设置为

% Allow TeX, and MF to parse the first line of an input file for
% the %&format construct.
parse_first_line = t

% But don't parse the first line if invoked as "tex", since we want that
% to remain Knuth-compatible.  The src_specials and
% file_line_error_style settings, as well as the options -enctex,
% -mltex, -8bit, etc., also affect this, but they are all off by default.
parse_first_line.tex = f
parse_first_line.initex = f

如果你添加

parse_first_line = f

到顶层texmf.cnf文件,即

/usr/local/texlive/2013/texmf.cnf

对于 2013 版本,您可以关闭所有二进制文件的该功能。

答案2

它会pdflatex编译 DVI 输出。如果您想生成 PDF,只需执行以下操作之一:

  • 将其更改为%&pdflatex
  • 跑步pdflatex -no-parse-first-line
  • 去掉它。

相关内容