在this article一书中,作者讨论了如何使用\@在句号后面加上正确的空格,这些句号不在句子的末尾,例如,先生,即等。
宏建议
\newcommand\etc{etc\@ifnextchar.{}{.\@}}
并不是很完美,因为在(\etc more text)
中它会生成(etc.more text)
。
我见过许多作者制作了自己版本的\etc
宏,大多数是在etc.\
上的变体。
在大多数情况下,\etc
、\ie
、\etal
和\eg
的哪些宏可以产生最好的结果?
这是不是在品味上过于个人化而不能在一般情况下解决?
发布于 2010-07-20 00:00:10
早先我使用宏来表示"et al.“等,但现在我不鼓励人们定义这种宏。
一个问题是你已经观察到的:让定义正确,以便它们正确处理所有特殊情况(包括与其他包的交互-例如,那些重新定义"\cite“命令和调整引用前的间距的包),这是令人惊讶的棘手问题。
但更重要的是,即使你有一堆满足你需要的宏,并且你知道如何使用它们,你的合著者很可能会对如何在各种特殊情况下正确使用你的宏感到困惑。
因此,我建议您避免使用宏来处理一些琐碎的事情,比如"et al“。并通过使用标准的Latex标记简单地拼写出所有内容。毕竟,大多数情况下不需要任何特殊处理(“例如”通常后面跟一个逗号;"et al.“通常后跟"~\cite“等),每当需要特殊处理时,所有Latex用户都应该知道如何使用诸如"\”和"\@“之类的命令。
发布于 2016-09-07 14:50:37
在CVPR的样式包中,它被定义为:
\usepackage{xspace}
% Add a period to the end of an abbreviation unless there's one
% already, then \xspace.
\makeatletter
\DeclareRobustCommand\onedot{\futurelet\@let@token\@onedot}
\def\@onedot{\ifx\@let@token.\else.\null\fi\xspace}
\def\eg{\emph{e.g}\onedot} \def\Eg{\emph{E.g}\onedot}
\def\ie{\emph{i.e}\onedot} \def\Ie{\emph{I.e}\onedot}
\def\cf{\emph{c.f}\onedot} \def\Cf{\emph{C.f}\onedot}
\def\etc{\emph{etc}\onedot} \def\vs{\emph{vs}\onedot}
\def\wrt{w.r.t\onedot} \def\dof{d.o.f\onedot}
\def\etal{\emph{et al}\onedot}
\makeatother
发布于 2010-08-20 21:10:23
您尝试过使用xspace
包吗?
示例宏:
\def\etc{etc.\@\xspace}
一些测试:
猫、狗等。\猫,狗,等等!诸若此类。\猫、狗等。\ Cat (狗等)。诸若此类。\
产品:
xspace包提供了一个命令,该命令查看命令流中它后面的内容,并决定是否插入一个空格来替换被TeX命令解码器“吃掉”的空格。
https://stackoverflow.com/questions/3282319
复制相似问题