我正在尝试使用带有可选参数的 TeX 创建一个简单的宏:
\elide[options]{}
我理解的一个常用方法是使用\futurelet
。到目前为止代码如下:
\documentclass[11pt]{article}
\begin{document}
\def\elidebefore[#1]#2{[$\ldots$] #2}
\def\elideafter#1{#1$\ldots$}
\def\elide {%
\futurelet\ifoptions
\choosemacro
}
% The \choosemacro, based on
% the lookahead of \elide, calls
% either \elidebefore or \elideafter
\def\choosemacro{%
\ifx\ifoptions [%
\let\choice = \elidebefore
\else
\let\choice = \elideafter
\fi
\choice
}
Testing \elide[b]{Lorem ipsum}
\elide{Lorem Ipsum}
\elide[b]{Lorem ipsum}
\end{document}
这有效……但由于我只检查方括号是否存在,并且切换到宏 1 或宏 2elide[]{}
将对方括号之间的任何内容起作用。如何,我可以扩展宏以读取方括号之间的字母吗?
是否有可以使用的预定义 LaTeX 宏?(我知道keyval
,但我更喜欢使用基本命令来做到这一点)。
答案1
如果您仅尝试定义一个带有可选参数的宏,\newcommand
则会为您执行此操作:
\newcommand{\elide}[2][\relax]{%
\ifx\relax#1%
#2$\ldots$%
\else $\ldots$ #2\fi}
应该与您的宏相同,但如果您给它一个以 开头的可选参数,它可能会表现得很奇怪\relax
。