我正在写一篇论文,论文中有大量的词汇表。hyperref 和 glossaries 包允许链接和着色参考文献,这很棒。不幸的是,大量的彩色条目在视觉上令人难以忍受。为了解决这个问题,我编辑了 \glsdisplayfirst 和 \glsdisplay 命令,如下所示,
\renewcommand*{\glsdisplayfirst}[4]{\textcolor{blue}{#1}#4}
\renewcommand*{\glsdisplay}[4]{\textcolor{black}{#1}#4}
这对 \gls、\Gls 和 \GLS 有效。这允许词汇表条目的第一次使用与所有后续使用的颜色不同。在这种情况下,第一个条目是“蓝色”,其余的与正文的颜色(黑色)相匹配。我主要通过反复试验得出这些命令。
不幸的是,当我添加 siunitx 包 \Gls 和 \GLS 构建文档时返回以下错误。
! Argument of \@declaredcolor has an extra }.
<inserted text>
\par
l.55 ...lised versions: 1) first letter \Gls{tla},
and 2) entire word \GLS{t...
冲突似乎与 \usepackage{siunitx} 语句在序言中的位置无关。siunitx.sty 中似乎没有对 @definecolor 的引用。\usepackage{siunitx} 在下面的工作示例中被推荐,取消注释会产生错误。虽然我熟悉 LaTeX,但这绝对超出了我的经验。我不确定从哪里开始解决这个问题,任何帮助都将不胜感激。
一个单独的小问题: 使用命令 \newacronym 可禁用两个已编辑的命令(\glsdisplayfirst 和 \glsdisplay),将所有词汇表条目恢复为原始颜色“红色”。虽然我可以通过仅使用 \gls 来解决这个问题,但对为什么会发生这种情况的任何见解也会有所帮助。测试此问题的代码在下面的实际示例中被注释掉。
示例
% document must be saved as "document.tex" for the makeindex command.
\documentclass[a4paper]{scrbook}
% \usepackage{siunitx}
% Colour
\usepackage{color}
\usepackage{xcolor}
% black must be capitalised due to the way glossaries works
\definecolor{BLACK}{RGB}{0,0,0}
% Hyperlinks
\usepackage{hyperref}
\hypersetup{colorlinks = true}
% Glossary
\usepackage[toc]{glossaries}
% define the colour of the first instance
\renewcommand{\glsdisplayfirst}[4]{\textcolor{blue}{#1}}
% define the colour of all subsequent instances
% as the subsequent entries are capitalised the colour BLACK must be defined
\renewcommand{\glsdisplay}[4]{\textcolor{black}{#1}}
% the following code automates the makeindex process
% borrowed from http://www.freiheitsfreund.de/2010/10/automatically-run-makeindex-from-within-a-latex-document-with-write18/
\def\execute{%
\begingroup
\catcode`\\=12
\executeaux}
\def\executeaux#1{\immediate\write18{#1}\endgroup}
\execute{makeindex -s document.ist -t document.glg -o document.gls document.glo}
\makeglossaries
%-------------------------
\begin{document}
\newglossaryentry{tla}{
name={TLA},
description={Three Letter Acronym},
first={Three Letter Acronym (TLA)}
}
%\newacronym{ana}{ANA}{A New Acronym}
Following is an example of a \gls{tla}.
Repeated again to demonstrate the desired change in colour at subsequent use \gls{tla}.
Again using the capitalised versions: 1) first letter \Gls{tla}, and 2) entire word \GLS{tla}.
%Using the newacronym command \gls{ana}, \Gls{ana} and \GLS{ana}
\printglossaries
\end{document}
在此先感谢您的帮助。
编辑
第二个 \renewcommand 导致了问题。通过删除它并将语句 \hypersetup{linkcolor=black} 放在目录之后(在我自己的示例中),我能够实现相同的结果,而不会发生 siunitx 冲突;避免问题而不是解决问题。
答案1
颜色问题
的文档\glsdisplay
包含一个红色框:
\glsdisplay
重新定义和 时需要小心,\glsdisplayfirst
因为像命令这样的命令\Gls
会在应用之前扩展显示的文本\makefirstuc
。如果您想使用格式化命令,最好定义一个处理所有格式的强大版本。例如,假设您希望文本以粗体斜体显示,最好执行以下操作:\DeclareRobustCommand{\textbfit}[1]{\emph{\bfseries #1}} \renewcommand{\glsdisplay}[4]{\textbfit{#1#4}}
mfirstuc
有关 的限制 的更多详细信息,请参阅文档\makefirstuc
。
以下适用于siunitx
:
\DeclareRobustCommand*{\textcolorglsdisplayfirst}[1]{\textcolor{blue}{#1}}
\DeclareRobustCommand*{\textcolorglsdisplay}[1]{\textcolor{black}{#1}}
\renewcommand{\glsdisplayfirst}[4]{\textcolorglsdisplayfirst{#1#4}}
\renewcommand{\glsdisplay}[4]{\textcolorglsdisplay{#1#4}}
问题\newacronym
添加
\DeclareAcronymList{\glsdefaulttype}
对序言有帮助。