我已经为带有句点的首字母缩略词(缩写)定义了一个宏,确保不会打印两次句末句点:\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}
但是,这会破坏最后一个字母和最后一个句号之间的字距调整 — 请参阅所附屏幕截图。当然,这是一个很小的问题,但我觉得这很有趣。其他一些字体(包括 Palatino ( \usepackage{mathpazo}
))的字距调整问题更为明显。是我滥用了\@ifnextchar
还是存在其他问题?(连字符也会发生同样的情况,尽管我想不出以下有用的应用:\makeatletter\def\doublef{f\@ifnextchar f{}{f}}\makeatother
和ff --- \doublef f --- \doublef i --- ffi
。)
答案1
\def\gp{G.P.\@ifnextchar.{\@gobble}{}}
\@gobble
在 latex 内核中定义为\def\@gobble#1{}