如何使用 \futurelet 定义可选参数

如何使用 \futurelet 定义可选参数

我正在尝试使用带有可选参数的 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

相关内容