定义颜色时词汇表和 siunitx 之间存在冲突(可能通过 hyperref)

定义颜色时词汇表和 siunitx 之间存在冲突(可能通过 hyperref)

我正在写一篇论文,论文中有大量的词汇表。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}

对序言有帮助。

相关内容