到目前为止,我一直在使用它standalone
来生成裁剪的图形,这些图形包含\includegraphics
在从同一源文件编译的 Beamer 演示文稿和文章 ( beamerarticle
) 中的命令中。今天,我想使用standalone's
创建图形的可能性,不仅包括它们,而且只要我包含ignorenonframetext
类选项,beamer
就会出现一些中断。我读过关于beamer
选项的信息standalone.cls
,但我不画“动画”图形,所以我认为我不需要它。
接下来你有一个最小的工作和不工作的例子:它适用于
\documentclass{article}
\usepackage{beamerarticle}
或者
\documentclass{beamer}
但\documentclass[ignorenonframetext]{beamer}
与 结合则不行\input{figure}
。如果\input
我将TiKZ
代码放在框架内,即使与 结合,也能再次工作ignorenonframetext
。
%\documentclass{article}
%\usepackage{beamerarticle}
%\documentclass{beamer}
\documentclass[ignorenonframetext]{beamer}
\usepackage{filecontents}
\usepackage{tikz}
\usepackage{standalone}
\begin{filecontents}{figure.tex}
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw(0,0) rectangle (3,5);
\end{tikzpicture}
\end{document}
\end{filecontents}
\begin{document}
\begin{frame}[fragile]{Hello}
\input{figure}
\end{frame}
\end{document}
错误信息显示:
! LaTeX Error: Can be used only in preamble.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.5 \documentclass
[tikz]{standalone}
? e
最后再补充几点。我使用了filecontents
package 来简化示例,实际的图形文件是独立的。我不知道 frame 选项是否fragile
必要。我\mode<all>
之前也测试过\input
,正如建议的那样使用 beamer 选项 ignorenonframetext 时,\input{...} 会被忽略但什么都没有改变。
更新
虽然egreg
答案对于 MWE 有效,但这太简单了,因为一旦引入第二个嵌套级别,\sainput
就会失败。接下来,您将有一个新的不那么简单的工作示例。在这种情况下,主文档是\input
一个文件,其中显示了\input
图standalone
。一切都适用于article+beamerarticle
或beamer
,但不适用于\documentclass[ignorenonframetext]{beamer}
。在最后一种情况下,pdflatex
完成并且*.log
没有显示任何错误,除了No pages of output.
并且结果*.pdf
为 0 大小。
%\documentclass{article}
%\usepackage{beamerarticle}
%\documentclass[ignorenonframetext]{beamer}
\documentclass{beamer}
\usepackage{standalone}
\usepackage{tikz}
\usepackage{filecontents}
\makeatletter
\def\sainput{\let\documentclass\sa@documentclass\input}
\makeatother
\begin{filecontents}{figure.tex}
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw(0,0) rectangle (3,5);
\end{tikzpicture}
\end{document}
\end{filecontents}
\begin{filecontents}{doc.tex}
\begin{frame}{This is a frame}
Here, there is a TiKZ figure
\input{figure}
\end{frame}
\end{filecontents}
\begin{document}
\input{doc}
\end{document}
答案1
该ignorenonframetext
选项弄乱standalone
了避免阅读序言的操作。
这似乎是一个解决方法:
\documentclass[ignorenonframetext]{beamer}
\usepackage{filecontents}
\usepackage{tikz}
\usepackage{standalone}
\begin{filecontents}{figure.tex}
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw(0,0) rectangle (3,5);
\end{tikzpicture}
\end{document}
\end{filecontents}
\makeatletter
\def\sainput{\let\documentclass\sa@documentclass\input}
\makeatother
\begin{document}
\begin{frame}{Hello}
\sainput{figure}
\end{frame}
\end{document}
我不会重新定义,\input
但如果你有勇气,你可以尝试
\makeatletter
\let\latexinput\input
\def\input{\let\documentclass\sa@documentclass\latexinput}
\makeatother
而不是像以前那样使用\makeatletter
-group\makeatother
并使用\input{figure}
。