在下面的代码中,我无法弄清楚如何使用 \SPACE 和 \DOT,以便将 \peektoken 与空格()进行比较,并生成点(.)作为输出以及测试 T(rue)或 F(alse)的结果。
\catcode`\.=\active
\def\dotnext{\ifx\peektoken\SPACE\DOT T\else \DOT F\fi}
\def.{\futurelet\peektoken\dotnext}
Lorem. Ipsum. is. simply. dummy text.
\bye
答案1
答案2
我针对 OP 提出的一个评论做出回应:“我希望将其构建成可以在受控环境中识别句子结束的东西。例如,可以将句子结束指定为当一个点后面跟着两个空格时发生。”
在这里,我使用一个标记循环作为 OP 的“受控设置”,如果找到一个点,则立即更改空格的 catcode,以便可以检查后面是否存在两个或多个空格来表示(END-OF-SENTENCE)
。单个空格或非空格字符不会触发该标准。
在没有前导点的情况下,多个空格将按照预期的 TeX 方式处理......作为单个空格标记。
\documentclass{article}
\usepackage{tokcycle}
\bgroup
\catcode32=12 %
\global\def\charsp{ }%
\egroup
\Characterdirective{%
\addcytoks{#1}%
\ifx.#1%
\catcode32=12 %
\tcpop\Q%
\ifx\charsp\Q
\tcpop\QQ\ifx\charsp\QQ\addcytoks{(END-OF-SENTENCE)}%
\catcode32=10 \tcpop\QQQ\tcpush\QQQ%
\else
\addcytoks[1]{ \QQ}\fi%
\else\addcytoks[1]{\Q}\fi
\catcode32=10 %
\fi
}
\begin{document}
\tokencyclexpress
Four spaces follow dot. %
Three spaces follow dot. %
Two spaces follow dot. %
One space follows dot. %
No spaces follow dot.%
End
\endtokencyclexpress
\end{document}