索引中按字母顺序排列的缩写格式化文本

索引中按字母顺序排列的缩写格式化文本

我正在使用带有首字母缩写词选项的词汇表包\usepackage[acronym,toc,shortcuts]{glossaries}

先前提供的答案(首字母缩略词仅在使用两次时才显示在索引中)非常适合在索引中列出首字母缩略词,使用说明\gls{some_acronym}

在撰写一篇新的长篇论文时,我注意到,当缩写文本的格式如下时: \newacronym{ita}{ITA}{\emph{italic text} acronym} 缩写在索引中列在“符号“ 类别:

代码输出

我希望索引中按字母顺序列出格式化的首字母缩略词。有什么想法吗?

梅威瑟:

\documentclass[11pt]{article}
\usepackage{makeidx}
\makeindex
\usepackage[acronym,toc,shortcuts]{glossaries}
\makeglossaries

\renewcommand*{\CustomAcronymFields}{%
  name={\the\glsshorttok},%
  symbol={\the\glsshorttok},%
  text={\the\glsshorttok\protect\index{\the\glslongtok\space(\the\glsshorttok)}},%
  plural={\the\glsshorttok\noexpand\acrpluralsuffix\protect\index{\the\glslongtok\space(\the\glsshorttok)}},%
  first={\the\glslongtok\space(\the\glsshorttok)\protect\index{\the\glslongtok\space(\the\glsshorttok)}},%
  firstplural={\the\glslongtok\noexpand\acrpluralsuffix\space(\the\glsshorttok)\protect\index{\the\glslongtok\space(\the\glsshorttok)}},%
  description={\the\glslongtok}%
}

\SetCustomStyle

\newacronym{cd}{CD}{compact disk}
\newacronym{un}{UN}{United Nations}
\newacronym{ita}{ITA}{\emph{italic text} acronym}
\newacronym{mc}{MC}{4-methyl-compound}
\newacronym{hgh}{HGH}{human growth hormone}
\newacronym{pi}{pI}{isoelectric point}


\begin{document}
\noindent
First\index{first} use of \gls{cd}\\
subsequent\index{subsequent} use of \gls{cd}
, and
\gls{un} and
\gls{ita} and
\gls{mc} and
\gls{hgh} and again \gls{hgh} and
\gls{pi}.

\printglossaries
\printindex

\end{document}

答案1

问题是它makeindex不理解 (La)TeX 命令。.idx您的 MWE 创建的文件包含:

\indexentry{first}{1}
\indexentry{compact disk (CD)}{1}
\indexentry{subsequent}{1}
\indexentry{compact disk (CD)}{1}
\indexentry{United Nations (UN)}{1}
\indexentry{\emph  {italic text} acronym (ITA)}{1}
\indexentry{4-methyl-compound (MC)}{1}
\indexentry{human growth hormone (HGH)}{1}
\indexentry{human growth hormone (HGH)}{1}
\indexentry{isoelectric point (pI)}{1}

makeindex解释\emph {italic text} acronym (ITA)为字符串\emph等。第一个字符是反斜杠,因此makeindex将其放在“符号”组中。有两个选项:提供makeindex不包含任何格式化命令的其他排序键或xindy改为使用(这将忽略在排序键中找到的任何 LaTeX 命令)。

如果您想继续使用makeindex,可以修改 的定义,\CustomAcronymFields使其使用与词汇表条目相同的排序键。修改后的定义是:

\renewcommand*{\CustomAcronymFields}{%
  name={\the\glsshorttok},%
  symbol={\the\glsshorttok},%
  text={\the\glsshorttok\protect\index{\noexpand\glsentrysort{\the\glslabeltok}@\the\glslongtok\space(\the\glsshorttok)}},%
  plural={\the\glsshorttok\noexpand\acrpluralsuffix\protect\index{\noexpand\glsentrysort{\the\glslabeltok}@\the\glslongtok\space(\the\glsshorttok)}},%
  first={\the\glslongtok\space(\the\glsshorttok)\protect\index{\noexpand\glsentrysort{\the\glslabeltok}@\the\glslongtok\space(\the\glsshorttok)}},%
  firstplural={\the\glslongtok\noexpand\acrpluralsuffix\space(\the\glsshorttok)\protect\index{\noexpand\glsentrysort{\the\glslabeltok}@\the\glslongtok\space(\the\glsshorttok)}},%
  description={\the\glslongtok}%
}

这将创建以下.idx文件:

\indexentry{first}{1}
\indexentry{CD@compact disk (CD)}{1}
\indexentry{subsequent}{1}
\indexentry{CD@compact disk (CD)}{1}
\indexentry{UN@United Nations (UN)}{1}
\indexentry{ITA@\emph  {italic text} acronym (ITA)}{1}
\indexentry{MC@4-methyl-compound (MC)}{1}
\indexentry{HGH@human growth hormone (HGH)}{1}
\indexentry{HGH@human growth hormone (HGH)}{1}
\indexentry{pI@isoelectric point (pI)}{1}

(排序键是每个条目中字符前面的位@。)现在根据首字母缩写而不是完整形式进行排序。您可以通过执行以下操作来整理一下并减少出错的可能性:

\newcommand*{\gindex}{%
  \protect\index{\noexpand\glsentrysort{\the\glslabeltok}@\the\glslongtok\space
    (\the\glsshorttok)}%
}

\renewcommand*{\CustomAcronymFields}{%
  name={\the\glsshorttok},%
  symbol={\the\glsshorttok},%
  text={\the\glsshorttok\gindex},%
  plural={\the\glsshorttok\noexpand\acrpluralsuffix\gindex},%
  first={\the\glslongtok\space(\the\glsshorttok)\gindex},%
  firstplural={\the\glslongtok\noexpand\acrpluralsuffix\space(\the\glsshorttok)\gindex},%
  description={\the\glslongtok}%
}

但是,按长格式排序会更好,因此如果您仍然想坚持使用makeindex,则以下修改将从\emph条目中删除:

\makeatletter
\renewcommand{\newacronymhook}{%
  {%
    \let\emph\@firstofone
    \expandafter\protected@xdef\expandafter\gindexsort
       \expandafter{\the\glslongtok}%
  }%
}
\makeatother

\newcommand*{\gindex}{%
  \protect\index{\gindexsort @\the\glslongtok\space (\the\glsshorttok)}%
}

如果你有其他格式命令,例如\textbf,它们可以用同样的方式被剥离:

\makeatletter
\renewcommand{\newacronymhook}{%
  {%
    \let\emph\@firstofone
    \let\textbf\@firstofone
    \expandafter\protected@xdef\expandafter\gindexsort
       \expandafter{\the\glslongtok}%
  }%
}
\makeatother

.idx文件现在包含:

\indexentry{first}{1}
\indexentry{compact disk@compact disk (CD)}{1}
\indexentry{subsequent}{1}
\indexentry{compact disk@compact disk (CD)}{1}
\indexentry{United Nations@United Nations (UN)}{1}
\indexentry{italic text acronym@\emph  {italic text} acronym (ITA)}{1}
\indexentry{4-methyl-compound@4-methyl-compound (MC)}{1}
\indexentry{human growth hormone@human growth hormone (HGH)}{1}
\indexentry{human growth hormone@human growth hormone (HGH)}{1}
\indexentry{isoelectric point@isoelectric point (pI)}{1}

最终的索引现在如下所示:

排序索引的图像

答案2

这个问题现在似乎已经解决了。在 Overleaf 上编译 MWE 时,结果正常。

但是,有一个高度相关的问题,那就是当首字母缩略词(而不是长形式)以“\”开头时。

梅威瑟:

\documentclass[11pt]{article}
\usepackage{makeidx}
\makeindex
\usepackage[acronym,toc,shortcuts]{glossaries}
\makeglossaries

\newacronym{cd}{CD}{compact disk}
\newacronym{un}{UN}{United Nations}
\newacronym{ita}{\emph{ITA}}{italic text acronym} % \emph is in the acronym, not the long form
\newacronym{mc}{MC}{4-methyl-compound}
\newacronym{hgh}{HGH}{human growth hormone}
\newacronym{pi}{pI}{isoelectric point}


\begin{document}
\noindent
First\index{first} use of \gls{cd}\\
subsequent\index{subsequent} use of \gls{cd}
, and
\gls{un} and
\gls{ita} and
\gls{mc} and
\gls{hgh} and again \gls{hgh} and
\gls{pi}.

\printglossaries
\printindex

\end{document}

您可以使用可选参数轻松修复此问题sortnewacronym正如所指出的那样这里

\newacronym[sort=italic text]{ita}{\emph{ITA}}{italic text acronym}

答案3

为什么要使用makeidx-package?不知道它到底有什么问题,但没有它也可以正常工作,即使没有索引也是如此。但这也是词汇表的内置功能,您可以将 package 选项index与词汇表用户手册第 2.6 节中描述的相应命令一起使用。

这是您修改后的 MWE:

\documentclass[11pt]{article}
%\usepackage{makeidx}
%\makeindex
\usepackage[acronym,toc,shortcuts,index]{glossaries}
\makeglossaries

\renewcommand*{\CustomAcronymFields}{%
  name={\the\glsshorttok},%
  symbol={\the\glsshorttok},%
  text={\the\glsshorttok\protect\index{\the\glslongtok\space(\the\glsshorttok)}},%
  plural={\the\glsshorttok\noexpand\acrpluralsuffix\protect\index{\the\glslongtok\space(\the\glsshorttok)}},%
  first={\the\glslongtok\space(\the\glsshorttok)\protect\index{\the\glslongtok\space(\the\glsshorttok)}},%
  firstplural={\the\glslongtok\noexpand\acrpluralsuffix\space(\the\glsshorttok)\protect\index{\the\glslongtok\space(\the\glsshorttok)}},%
  description={\the\glslongtok}%
}

\SetCustomStyle

\newacronym{cd}{CD}{compact disk}
\newacronym{un}{UN}{United Nations}
\newacronym{ita}{ITA}{\emph{italic text} acronym}
\newacronym{mc}{MC}{4-methyl-compound}
\newacronym{hgh}{HGH}{human growth hormone}
\newacronym{pi}{pI}{isoelectric point}
\newterm{first}
\newterm{subsequent}

\begin{document}
  \noindent
  \Gls{first} use of \gls{cd}\\
  \gls{subsequent} use of \gls{cd}
  , and
  \gls{un} and
  \gls{ita} and
  \gls{mc} and
  \gls{hgh} and again \gls{hgh} and
  \gls{pi}.

  \printglossaries
%  \printindex

\end{document}

对我来说,它产生这样的输出:

MWE 的输出

相关内容