我正在使用带有首字母缩写词选项的词汇表包\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)
为字符串\
、e
、m
、p
、h
等。第一个字符是反斜杠,因此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}
您可以使用可选参数轻松修复此问题sort
,newacronym
正如所指出的那样这里。
\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}
对我来说,它产生这样的输出: