\@ifnextchar 在展开时会破坏字距调整

\@ifnextchar 在展开时会破坏字距调整

我已经为带有句点的首字母缩略词(缩写)定义了一个宏,确保不会打印两次句末句点:\gp打印“GP”并\gp.打印“GP”这是一个 MWE:

\documentclass{article}
\makeatletter\def\gp{G.P\@ifnextchar.{}{.}}\makeatother
\begin{document}
\gp{} (bad) \par \gp. (bad) \par G.P. (O.K.)
\end{document}

enter image description here

但是,这会破坏最后一个字母和最后一个句号之间的字距调整 — 请参阅所附屏幕截图。当然,这是一个很小的问题,但我觉得这很有趣。其他一些字体(包括 Palatino ( \usepackage{mathpazo}))的字距调整问题更为明显。是我滥用了\@ifnextchar还是存在其他问题?(连字符也会发生同样的情况,尽管我想不出以下有用的应用:\makeatletter\def\doublef{f\@ifnextchar f{}{f}}\makeatotherff --- \doublef f --- \doublef i --- ffi。) enter image description here

答案1

\def\gp{G.P.\@ifnextchar.{\@gobble}{}}

\@gobble在 latex 内核中定义为\def\@gobble#1{}

相关内容