什么 Makefile 可以生成幻灯片和讲义的通用文件

什么 Makefile 可以生成幻灯片和讲义的通用文件

的一个方便的功能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 notespdflatex handout

答案2

我的解决方案是使用sed。我不擅长使用正则表达式,但这是执行此操作的基本命令。

sed "s/documentclass[[?][a-zA-Z0-9,]*[]?]/documentclass[handout]/g" main.tex > handout.tex

这将创建第二个文件。我知道有一种方法可以存储它找到的选项并保留它们。这并不复杂,但我还没有花时间去做(另一天的另一个问题)。

无论如何,我将命令sedlualatex演示文稿和讲义的命令串联起来,如下所示:

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

这显然可以通过三个单独的命令来完成。

相关内容