目录中的颜色变化 \addcontentsline 显示在 pdf 书签中

目录中的颜色变化 \addcontentsline 显示在 pdf 书签中

我想更改目录中某一行的颜色。我有很多非常具体的格式,因此为了在目录中添加链接,我使用了命令\addcontents

\definecolor{Red}{RGB}{238, 50, 36}  

\addcontentsline{toc}{section}{\color{Red}{United States}}

一切按预期进行,我让那条线显示为红色。然而,意想不到的结果是,在 pdf 书签文档层次结构中出现的是“RedUnited States”,而不是“United States”。

有没有办法改变颜色使用\addcontents而不会发生这种情况?

注意:我正在使用该tocloft包。

在此处输入图片描述

答案1

要么使用\textcolorjfbu 的回答或者\color在书签中禁用:

\usepackage{hyperref}
\pdfstringdefDisableCommands{%
    \def\color#1#{\@gobble}%
}

#1捕获到下一个左花括号为止的所有内容,即 的可选参数\color。然后\@gobble删除 的强制参数\color

答案2

您可以检查日志来确认是否出了问题:

Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref)                removing `\@ifnextchar' on input line 7.

(行号表明您在源代码中)

正确的宏是\textcolor,不是\color

\documentclass{article}
\usepackage{color, hyperref}
\definecolor{Red}{RGB}{238, 50, 36}  
\begin{document}
\tableofcontents
\section{foo}
\addcontentsline{toc}{section}{\textcolor{Red}{United States}}
\section{bar}
\end{document}

(写入文件时它会经历一些扩展.toc,但这在这里并不重要;您可以使用它, \protect\color但它可以在不着色的情况下工作,其他材料与其他宏添加的额外组有关,这是运气问题。并且 OP 代码中的括号United States没有任何作用,因为它不是\color命令的参数。最好使用\textcolor。)

相关内容