在 beamer 中使用 \newcommand 和 \immediate\write

在 beamer 中使用 \newcommand 和 \immediate\write

\immediate\write 我正在尝试使用下面的 MWE将一些字符串写入外部文件

\documentclass[a4paper,9pt]{beamer}
\begin{document}

\begin{frame}[plain] %< comment out for article

\newcommand{\createtexfile}[1]{%
\newwrite\file
\immediate\openout\file=output.tex
\immediate\write\file{\string\textbf{foo bar} }
\immediate\write\file{\string #1}
\immediate\closeout\file
}

\createtexfile{some text}

\end{frame} %< comment out for article
\end{document}

输出内容为:

> cat output.tex

\textbf{foo bar}
some text

如果我使用“article”作为文档类(应该注释掉框架)来运行它,它会编译而不会出错。当使用“beamer”文档类时,我收到以下错误:

! \iterate 定义中的参数编号非法。 1 l.17 \end{frame} %< 注释掉文章 您的意思是输入 ## 而不是 #,对吗?或者之前某个地方忘记了 },导致一切都搞砸了?我假设您的意思是 ##。

其他人也遇到这个错误吗?如果是这样,有什么办法可以解决这个问题吗?我将非常感激您的意见。

答案1

不要在框架内定义命令,而是在前言中定义它。

此外,永远(不仅仅是在 beamer 中)不要\newwrite在序言中有一个你只想执行一次的宏。

您还缺少行尾的 %。

答案2

只是为了完成,接受大卫卡莱尔的回答,这就是应该如何实施。

\documentclass[a4paper,9pt]{beamer}

\newwrite\file %<-

\newcommand{\createtexfile}[1]{%
\immediate\openout\file=output.tex
\immediate\write\file{\string\textbf{foo bar} }%<-
\immediate\write\file{\string #1}%<-
\immediate\closeout\file%<-
}

\begin{document}

\begin{frame}[plain] %< comment out for article

\createtexfile{some text}

\end{frame} %< comment out for article
\end{document}

相关内容