独立版是否与 ignorenonframetext beamer 的选项兼容?

独立版是否与 ignorenonframetext beamer 的选项兼容?

到目前为止,我一直在使用它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

最后再补充几点。我使用了filecontentspackage 来简化示例,实际的图形文件是独立的。我不知道 frame 选项是否fragile必要。我\mode<all>之前也测试过\input,正如建议的那样使用 beamer 选项 ignorenonframetext 时,\input{...} 会被忽略但什么都没有改变。

更新

虽然egreg答案对于 MWE 有效,但这太简单了,因为一旦引入第二个嵌套级别,\sainput就会失败。接下来,您将有一个新的不那么简单的工作示例。在这种情况下,主文档是\input一个文件,其中显示了\inputstandalone。一切都适用于article+beamerarticlebeamer,但不适用于\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}

相关内容