纯 TeX 中的可选参数

纯 TeX 中的可选参数

这是有和没有下标的旋转闸门

\def\stile{{|\kern-.225em-}}

\def\sstile#1{{|\kern-.225em-}_{\rm #1}}

$$\stile \alpha$$

$$\sstile{K} \alpha$$

\bye

\stile \alpha如果只有一个命令,并且能够输入或就好了 \stile[K] \alpha。如何实现呢?

在此处输入图片描述

答案1

展望[

\def\stile{\futurelet\next\dostile}
\def\dostile{%
  \mathrel{|\mkern-4mu{-}}
  \ifx[\next %]
    \expandafter\dostileopt
  \fi
}
\def\dostileopt[#1]{_{\rm #1}}

$\stile \alpha$

$\stile[K] \alpha$

\bye

在此处输入图片描述

答案2

您可以使用普通兼容的eplain宏:

在此处输入图片描述

\input eplain

\catcode`\@=11

\def\stile{\@getoptionalarg\xstile}

\def\xstile{{|\kern-.225em-}%
    \ifx\@optionalarg\empty\else_{\rm\@optionalarg}\fi}

\catcode`\@=12

$$\stile \alpha$$

$$\stile[K] \alpha$$

\bye

答案3

采用原始实现\@ifnextchar(我猜,采用其中的一个latex.ltx会更好):

\catcode`\@=11
\long\def\@firstoftwo#1#2{#1}%
\long\def\@secondoftwo#1#2{#2}%
\long\def\@ifnextchar#1#2#3#4{%
  \ifx#1#4%
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {#2}{#3}#4}%
\def\stile{\@ifnextchar[{\stile@i}{\stile@ii}}%
\def\stile@i[#1]{{|\kern-.225em-}_{\rm #1}}%
\def\stile@ii{{|\kern-.225em-}}%
\catcode`\@=12

$$\stile \alpha$$

$$\stile[K] \alpha$$

\bye

更稳定的版本\@ifnextchar(类似于latex.ltx但不完全相同):

\long\def\@ifnextchar#1#2#3{%
  \let\@tmpa=#1%
  \def\@tmpb{#2}%
  \def\@tmpc{#3}%
  \futurelet\@future\@ifnextchar@i}%
\def\@ifnextchar@i{%
  \ifx\@tmpa\@future%
    \expandafter\@tmpb
  \else
    \expandafter\@tmpc
  \fi}%

答案4

我知道你标记了这个{plain-tex},但这确实是使用 LaTeX 的一个例子,旋转闸门包,将会有很大的帮助。

然后,您可以简单地使用$\sststile{\mathrm{K}}{} \alpha$。此包还可以提高旋转闸门的整体排版质量(请参阅下图,来自turnstile文章),并提供大量附加选项。

旋转门下标字体的比较

相关内容