据我所知,在 UNIX 下,任何常规文件都可以通过添加舍邦:
#! /path/to/executing-program --with --options
如何在不改变整个文档的语法规则的情况下将相同的原理应用于 TeX 文件?
$ cat > tmp.tex
#! /usr/bin/env tex --mystery --options
hello, world
\bye
$ chmod +x tmp.tex
$ ./tmp.tex
$ dvi2tty -q tmp.dvi | grep .
hello, world
1
$ logout
答案1
这是文件seanenv.tex
:
#! /usr/bin/env pdflatex \catcode35=14 \input
\catcode`\#=6
\documentclass{article}
\begin{document}
Hello, Sean!
\end{document}
之后chmod u+x seanenv.tex
,我可以发出
./seanenv.tex
并且seanenv.pdf
文件已被编译。
注意 的字符代码是 35 #
,在 TeX 重新读取文件之前必须将其转换为注释字符。此后,#
会返回其类别代码 6。
这不仅限于pdflatex
;同样的策略也适用于tex
等等。
答案2
我也遇到这种情况。将第一行更改为使用 pdflatex 的路径(而不是通过 /usr/bin/env)即可解决问题:
#! /bin/pdflatex \catcode35=14 \input
如果需要,将 /bin/pdflatex 更改为 pdflatex 的完整路径。命令:
which pdflatex
会告诉你这是什么。