对于幻灯片,我定义了自己的框架命令。现在我想从 的定义更改为\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}
我添加了一个主题来显示标题(或缺失的标题)。