我看到的大多数冗长的序言都有几十行这样的内容
\newcommand{\Acal}{\mathcal{A}}
\newcommand{\Bcal}{\mathcal{B}}
%...
\newcommand{\Gcal}{\mathcal{G}}
虽然我可以轻松编写一个宏来循环遍历列表并定义相应的控制序列,但这并不美观。例如,
\def\letterdef#1#2#3{\def\letterdef@##1{\expandafter\def\csname #1\endcsname{#2}}%
\letterdef@@#3{?\@car{}}\@nil}
\def\letterdef@@#1{\@gobble#1\letterdef@{#1}\letterdef@@}
用作\letterdef{#1cal}{\mathcal{#1}}{ABCDEFG}
。将其放在序言中会使其看起来不好看。是否已经有提供此类功能的软件包?
答案1
来自\docsvlist
etoolbox
可以使这变得更容易:
\def\do#1{\@namedef{#1cal}{\ensuremath{\mathcal{#1}}}
\docsvlist{A,B,C,D,E,F,G}
(或者,也有\forcsvlist
使用内联处理程序而不是预定义\do
宏的命令。)
但是,正如我在上面的评论中所说,我反对这种非语义的快捷方式。虽然这\Acal
当然是更短比 更\mathcal{A}
干净。我更喜欢使用语义快捷方式,例如定义\bigO
(\mathcal{O}
Landau 符号)或\laplace
定义\mathcal{L}
。