我想为我的 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+ c,Ctrl+ 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 都会迅速putframe
用frame
环境替换。
还有更多高级信息TeXstudio 手册对于其他宏类型。