![在 beamer 中使用 \newcommand 和 \immediate\write](https://linux22.com/image/380282/%E5%9C%A8%20beamer%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20%5Cnewcommand%20%E5%92%8C%20%5Cimmediate%5Cwrite.png)
\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}