的一个方便的功能beamer
是能够制作幻灯片或讲义。您“只”需要更改源代码中的一行。一个已知的解决方案是对不同的选项使用 2 个不同的文件,并对幻灯片使用一个通用的输入,但是发现这种解决方案不经济。
但是,我希望使用 Makefile 更自然地制作幻灯片和讲义。
是否可以在命令行(例如lualatex
)传递一个可以由 beamer 使用的选项并将其包含在 Makefile 中?
答案1
你可以像这样执行它:
pdflatex '\PassOptionsToClass{handout}{beamer} \input{presentation}'
这仍将创建presentation.pdf
并覆盖 PDF 的普通版本。
或者您也可以使用三个文件并创建以下文档:
% notes.tex
\PassOptionsToClass{notes=only}{beamer}
\input{presentation}
% handout.tex
\PassOptionsToClass{handout}{beamer}
\input{presentation}
这将创建notes.pdf
并且handout.pdf
不需要任何编译器选项。
现在只需使用 和 即可轻松编译主文件,并使用和分别pdflatex presentation
编译笔记和讲义。pdflatex notes
pdflatex handout
答案2
我的解决方案是使用sed
。我不擅长使用正则表达式,但这是执行此操作的基本命令。
sed "s/documentclass[[?][a-zA-Z0-9,]*[]?]/documentclass[handout]/g" main.tex > handout.tex
这将创建第二个文件。我知道有一种方法可以存储它找到的选项并保留它们。这并不复杂,但我还没有花时间去做(另一天的另一个问题)。
无论如何,我将命令sed
与lualatex
演示文稿和讲义的命令串联起来,如下所示:
sed "s/documentclass[[?][a-zA-Z0-9,]*[]?]/documentclass[handout]/g" main.tex > handout.tex && lualatex --jobname=Presentation --synctex=1 --output-directory=Presentation main.tex && lualatex --jobname=Handout --synctex=1 --output-directory=Handout handout.tex
这显然可以通过三个单独的命令来完成。