在 Beamer 中创建用于帧的开始和结束的宏“\newcommand”很困难

在 Beamer 中创建用于帧的开始和结束的宏“\newcommand”很困难

我想为我的 Beamer 演示文稿创建一个 Latex 宏。我经常使用 Beamer,并且想为 Beamer 创建宏,以\begin{frame}减少\end{frame}按键次数。在文档开头,我有:

\newcommand{\bfrm}{\begin{frame}}%start new frame
\newcommand{\efrm}{\end{frame}}%end new frame

编译成功。然后我测试两个宏中的第一个,看看它是否是框架的开头:

\bfrm{New frame testing}
    blah blah
\end{frame}

这产生了我想要的结果。然后我测试第二个宏:

\bfrm{New frame testing}
    blah blah
\efrm

编译失败,提示参数失控。失败的原因是什么?

答案1

可以做就做

\newcommand\bfrm[1][]{%
  \if\relax\detokenize{#1}\relax
    \def\startfrm{\begin{frame}}%
  \else
    \def\startfrm{\begin{frame}[#1]}%
  \fi
  \innerbfrm
}
\long\def\innerbfrm#1\efrm{\startfrm#1\end{frame}}

然而,我认为打字没有任何好处

\bfrm
The frame text
\efrm

超过

\begin{frame}
The frame text
\end{frame}

我只看到了代码混淆。输入完整标签所花的时间与编写框架文本所需的时间相比微不足道。

任何好的编辑器都提供了方便输入常用部分的方法;使用 Emacs,你只需输入

Ctrl+ cCtrl+ e,,,,,,frameEnter

在你得到的文件中

\begin{frame}

\end{frame}

将光标置于标签之间。十个键,与 相同\bfrm\efrm,但您不必担心忘记\efrm

答案2

您可能已经尝试过,我们中的许多人可能都尝试过类似的方法,但都失败了。除了环境概念(这是一个相当复杂的 TeX 概念)之外,我保证,在任何其他环境试验中,您都会浪费不必要的时间来调试原因,而您认为通过避免实际语法节省了这些时间。

主要问题在于,如果我可以走捷径来避免冗长且可能超出我能力范围的讨论,解析器希望看到一个明确定义好的终点。如果你愿意,你可以想象一下这个比喻

\def\mymacro#1!{}

当我们按如下方式使用它时会失败

\def\myarg{a!!!}
\mymacro{\myarg}

即使有很多感叹号,至少检测出一个。好吧,这是一个扩展问题,我听到你说,那么在你尝试之前,你能猜出下面会给出什么吗?

\expandafter\mymacro\expandafter{\myarg}

人们很常见类似的尝试来避免使用快捷方式和技巧的括号语法,试图用\bgroup,\egroup对等来代替它们。我为他们感到难过。

简而言之,TeX 并不像你想象的那样工作(好坏不是我的论点)。让我重申我的观点:

TeX 中没有可以节省您时间的捷径。从长远来看,庄家总是赢家。

这并不意味着我喜欢 TeX 语法。我只是传递火炬。如果你真的对 pair 版本感到困扰,那么最好\frame{....}使用环境语法。但你需要添加\frametitle{...}(我认为)。

正如 Joseph Wright 提醒的那样,不要使用\frame{...}这两种工具。而是寻找一款具有自动完成功能的优秀 IDE。

答案3

我使用发布了这个答案特克斯工作室才意识到 OP 使用的是emacs。尽管如此,我还是会让它对将来遇到它的人有用。

1- 使用键盘快捷键

转到Macros > Edit Macros > + Add > Environment,然后输入%frame,这将要求 TeXstudio 创建\begin{frame}\end{frame}。当然,frame可以用您想要创建的任何环境替换。

在此处输入图片描述

可以通过以下方式更改此宏的快捷方式:Configure TeXstudio > Shortcuts

在此处输入图片描述


2- 定义新命令

参照Edit Macros窗口,在Name字段下,有一个名为的字段Abbreviation,您可以在其中定义任意命令,例如\myframe

在此处输入图片描述

每当您输入完此命令时\myframe,TeXstudio 都会自动创建一个frame环境。您可以按enter,从弹出菜单中选择它,或者按 来ctrl + space完成命令并放置环境。

在此处输入图片描述


3-定义触发器

第三个字段Trigger接受典型文本,例如putframe。每当您putframe通过插入字母完成输入时e,TeXstudio 都会迅速putframeframe环境替换。


还有更多高级信息TeXstudio 手册对于其他宏类型。

相关内容