向文档传递参数

向文档传递参数

我通过 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

是:

传递给 LuaLaTeX 的参数列表

相关内容