我想用缩写点来排版我的首字母缩略词,例如P.C.A.
代表principal component analysis
并使用宏。
这个问题
提供了一个技巧,可以避免在首字母缩略词位于句子末尾时出现双点,This could be done with a \pca.
这样
这可以用 PCA 来实现
并不是
这可以用 PCA 来完成。
现在,我想将此方法与 的首字母缩略词相关命令结合起来glossaries
。因此,我使用此命令定义了一个首字母缩略词
\newacronym{pca}{\pca}{principal component analysis}
然后使用它\gls{pca}
This could be done with a \gls{pca}.
但是,该glossaries
命令在 \pca 和句号之间添加了一些字符,因此之前提到的技巧不起作用,我得到了双点。
你知道我该如何处理吗?
这是一个最小的工作示例。xspace
可以删除包和命令;它们旨在符合英语用法。
\documentclass{article}
\usepackage[acronym]{glossaries}
\makeglossaries
\usepackage{xspace}
\makeatletter
\DeclareRobustCommand{\abren}[1]{%
\@ifnextchar{.}%
{#1}%
{#1.\@\xspace}%
}
\makeatother
\newcommand{\pca}{\abren{P.C.A}}
\newacronym{pca}{\pca}{principal component analysis}
\begin{document}
This could be done with a \pca. %good
This could be done with a \gls{pca}. %good
This could be done with a \gls{pca}.%awkward
\end{document}
答案1
这是一个可能的解决方案:
\documentclass{article}
\usepackage[acronym]{glossaries}
\usepackage{xspace}
\makeglossaries
\newacronym{pca}{P.C.A.}{principal component analysis}
\makeatletter
\newcommand{\pgls}[1]{%
\expandafter\csname ifglo@#1@flag\endcsname
\gls{#1}\expandafter\@firstofone
\else
\gls{#1}\expandafter\@gobble
\fi
{\@ifnextchar.{\get@sf}{\xspace}}%
}
\def\get@sf#1{\spacefactor\the\sfcode`#1\relax}
\makeatother
\begin{document}
This could be done with a \pgls{pca}. Just to see the first usage.
This could be done with a \pgls{pca}. And the spacing?
This could be done with a P.C.A\@. And the spacing?
This could be done with a \pgls{pca} or not.
This could be done with a P.C.A. or not.
\end{document}
带有显式的行P.C.A.
只是为了显示间距是否合适。宏\pgls
检查我们是否是第一次使用该首字母缩略词。更复杂的事情,例如在其他时候使用扩展版本,可以通过 提供的普通命令获得glossaries
。
宏首先检查首字母缩略词是否已被使用。在这种情况下,条件\ifglo@pca@flag
为真。因此,当它为假时,我们除了发出 之外不必做任何特殊的事情\gls{pca}
。\expandafter\csname ifglo@#1@flag\endcsname
只需使用参数:\pgls{pca}
它就会变成\ifglo@pca@flag
所需的。
如果条件为真,则\fi
评估最后一个标记之后的标记。这是检查后面是否有句点;如果有句点,则\get@sf
执行,否则\xspace
(这是必要的,因为\@ifnextchar
会吞噬空格)。
如果有句点,\@ifnextchar
则不删除它,它将成为的参数\get@sf
,扩展为\spacefactor\the\sfcode
.\relax`,从而设置所需的空间因子。