在 beamer 框架中使用 \write18 时出现问题

在 beamer 框架中使用 \write18 时出现问题

我被这个小而烦人的问题困住了。我试图使用一个\write18命令,其中我使用了一个局部变量\mytest。我真的不明白为什么如果我注释这两个和,这个 SWE 会起作用,\begin{frame}\end{frame}如果我使用它们,它却不起作用。此外,如果我在语句中使用\jobnamein place of,它就会起作用。\mytest\write18

有人有想法吗?

\documentclass{beamer}

\makeatletter
\newcommand{\print}[1]{
  \def\mytest{#1}
  \mytest
  \write18{echo;echo my test is \mytest\   }
  }
\makeatother

\begin{document}
\begin{frame}{}
\print{hello world}
\end{frame}

\end{document}

答案1

\write18在 shipout 时执行,此时帧已经结束,因此的本地定义\mytest已被丢弃。

如果你使用,\immediate\write18你就会得到你想要的。当然,指令的执行次数与框架中的覆盖次数一样多,所以也许\only应该使用指令。

相关内容