为什么OPmac中的`\iid`宏只支持“,”或“。”

为什么OPmac中的`\iid`宏只支持“,”或“。”

要在 OPmac 中创建索引条目,请输入如下内容:

Oh, how I like \ii figs figs.

注意到那里的重复了吗?为了方便起见,OPmac 提供了\iid

Oh, how I like \iid figs .

在这种情况下,我不需要重复单词“figs”,尽管我必须在“s”和“。”之间输入一个空格才能正确排版句子。

不幸的是,下面的排版不正确:

Oh, does anyone else like \iid figs ?

在这种情况下,我们不会排版“figs?”,而是得到带有空格的“figs?”。

罪魁祸首似乎在这里:

\def\iiD{\ifx\tmp,\else\ifx\tmp.\else\space\fi\fi} % 处理逗号和句号

我修改了一下,添加了一个问号(“?”)

\def\iiD{\ifx\tmp,\else\ifx\tmp.\else\ifx\tmp?\else\space\fi\fi\fi}

但显然需要其他标点符号,例如感叹号、冒号、分号等。有没有更好的方法来处理这个问题?

答案1

有可能重新定义\iid宏以使其更加智能。要点是,的参数\iid用空格分隔(而不是两个括号),以节省输入。但有时两个括号可能很有用。

\let\iidC=\iid
\def\iid {\futurelet\next\iidA}
\def\iidA {\ifx\next\bgroup \expandafter \iidB\else \expandafter \iidC \fi}
\def\iidB #1{\iindex{#1}#1}

现在,您可以使用\iid word后跟空格或\iid {word}不跟跟空格。在您的例子中:\iid{figs}?

相关内容