有没有一种简单的方法可以让 Beamer 在编译演示文稿时将演示文稿注释输出到单独的 PDF 文件?我知道一种方法是创建两个主文件,一个用于演示文稿,一个用于注释,每次都编译它们,但我觉得这有点尴尬。
答案1
有一个选项叫做\setbeameroption{show only notes}
\documentclass{beamer}
%\setbeameroption{show notes}
\setbeameroption{show only notes}
\begin{document}
\frame{\frametitle{FIRST}
On slide
\note{Whatever}
}
\end{document}
编译,复制 pdf(另一个名字!),注释掉第二个setbeameroption
并再次编译。当然,您可以编写一个 makefile(取决于您的操作系统),但如果您每次运行后都不需要这两个文件,那么这种方式会更容易(或更少编码)。对于编写过程,我建议使用选项show notes
on(删除%
)。
编辑
这里有一个一次编译(一次点击)解决方案。它利用了\write18
pdflatex 需要的选项--shell-escape
。
\write18{./file.sh }
\documentclass{beamer}
\input{out.out}
\begin{document}
\frame{\frametitle{FIRST}
On slide one.
\note{Whatever you want}
}
\end{document}
虽然file.sh
#! /bin/bash
echo > out.out
pdflatex yourname
cp yourname.pdf nonotes.pdf
echo \\setbeameroption{show only notes} > out.out
该文件必须可执行,例如 chmod 777 file.sh
,它必须与 yourname.tex 位于同一目录中。这当然是 bash,因此它只能在类 unix 系统上运行。
yourname
用你的 tex 文件的实际名称替换。
它有什么作用? 首先 pdflatex 将调用file.sh
执行 pdflatex 的 pdflatex ,然后将生成的 pdf 复制到 nonotes.pdf 中。之后,它会用选项填充 out.out show only notes
。write18
完成后,父 pdflatex 进程将继续。但现在 out.out 已填充,父进程将生成一个启用该选项的 pdf。
答案2
我不使用主文件。相反,我有一个用户定义的类,它接受一个选项来确定演示类型。如果没有提供该选项,则该类将产生演示beamer
。否则,它将article
结合使用该类beamerarticle
来获取讲义版本。此外,它重新定义了一些beamer
原本会提供输出的命令。例如,\frametitle
和\framesubtitle
。
如果我想生成演示文稿,我只需确保未提供额外选项。如果我想提供讲义,我只需添加额外选项。这比必须实现多个主文件的工作量要少得多。
您甚至可以通过在运行时提供选项来进一步实现这个想法。这样您就可以让脚本生成演示文稿和注释版本。
主要思想在第 15 章(编写类和包)中有更详细的解释。LaTeX 和朋友。