我通过 Makefile 编译了我的大部分文档,它负责处理参考书目、索引等。通常,我想从同一个 TeX 文件编译出不同的版本,只改变一些小的东西(例如,beamer 演示文稿加上带有选项的版本handout
)。
是否有任何标准机制可以将参数传递给 TeX 文件,以便我只需键入即可make handout
获取handout
上述示例中的版本?
答案1
我通过使用符号链接并测试作业名来实现这一点。也就是说,我有一个主 (la)tex 文件和一堆指向它的符号链接。为了找出实际使用了哪个符号链接,我检查了\jobname
文档中的宏并相应地设置了某些参数。特别是,如果\jobname
包含字符串“handout”,则使用该handout
选项调用 beamer 类。我通过使用“包装器”类来实现这一点,该类在调用真实的班级。
答案2
这是一种黑客方法,可能这是错误的方法:)。
除了传递文件名,您还可以传递一系列命令。具体来说,您可以执行如下操作
pdflatex "\def\ishandout{1} \input{foo.tex}"
它定义了宏\ishandout
(为1
),然后读取foo.tex
。然后,在里面foo.tex
,您可以检查是否\ishandout
定义了:
\ifdefined\ishandout
\documentclass[handout]{beamer}
\else
\documentclass{beamer}
\fi
答案3
我曾经像 Neil Olver 的回答那样做过,但找到了更好的方法:
代替:
pdflatex "\def\ishandout{1} \input{foo.tex}"
通过手动\ifdefined\ishandout
声明,您可以使用:
pdflatex "\PassOptionsToClass{handout}{beamer}\input{foo}"
如果您只想设置类选项(用于PassOptionsToPackage
包选项)。
在这种情况下,beamer
您还可以在主文件中使用以下语句:
\mode<handout>{%
<code>
}
如果您想在该模式下使用不同的设置。
答案4
有人用过 LuaTeX 吗?在文档中,你可以通过表格访问命令行参数arg
:
%luaargs.tex
\documentclass{article}
\begin{document}
Document args were:
\begin{description}
\directlua{
if not (arg == nil) then
for i,v in pairs(arg) do
tex.print("\string\\item[" .. i .. "]" .. v)
end
end
}
\end{description}
\end{document}
的结果:
lualatex luaargs.tex foo bar bam biz
是: