宏定义从 newcommand 更改为 NewDocumentCommand 会导致投影仪幻灯片中的空行出现错误

宏定义从 newcommand 更改为 NewDocumentCommand 会导致投影仪幻灯片中的空行出现错误

对于幻灯片,我定义了自己的框架命令。现在我想从 的定义更改为\newcommand\NewDocumentCommand但是 中的空行\xframe会产生错误。我可以用 替换所有空行,%然后它就可以正常工作了。

由于我现在已经有几百张幻灯片了,如果可能的话,我宁愿不触及幻灯片内容,而是提高其定义\xframe

谢谢 Sigbert

梅威瑟:

\documentclass{beamer}
\usepackage{xparse}

\NewDocumentCommand{\xframe}{om}{%
\frame{\frametitle{#1}#2}%
}

\newcommand{\myframe}[2][]{%
\frame{\frametitle{#1}#2}%  
}

\begin{document}
\myframe[Test - myframe]{

Line 1
}

% if under \xframe a % is inserted instead of the empty line the MWE works
\xframe[Test - xframe]{

Line 1
}

\end{document}

答案1

beamer几年前发布时,它使用

\frame{<contents>}

但 Till Tantau 意识到这种语法不好,因为当一个框架需要用逐字材料处理时,它需要扭曲,但不仅仅是这样,所以语法改为

\begin{frame}
...
\end{frame}

和选项可以指定给\begin{frame}。该命令的\frame行为与旧命令相同,但已被弃用。

您正在尝试返回旧语法(并使用它)。为了您自己着想,请不要这么做。

无论如何,如果你坚持这样做,你需要做两处修改:一是用于+m强制参数,因此允许空行;二是管理可选参数:如果你不指定可选参数,你肯定不希望 -NoValue-` 作为框架标题。

\documentclass{beamer}
\usetheme{metropolis}

\NewDocumentCommand{\xframe}{o+m}{%
  \begin{frame}
  \IfValueT{#1}{\frametitle{#1}}
  #2
  \end{frame}
}

\begin{document}

\xframe[Test - xframe]{

Line 1

Line 2

}

\xframe{No title here}

\end{document}

在此处输入图片描述

我添加了一个主题来显示标题(或缺失的标题)。

相关内容