![知识包着色](https://linux22.com/image/448916/%E7%9F%A5%E8%AF%86%E5%8C%85%E7%9D%80%E8%89%B2.png)
我在使用该软件包时遇到了一个比较复杂的问题knowledge
。MWE 如下:
\documentclass{article}
\usepackage{xcolor}
\usepackage{hyperref}
\usepackage{cleveref}
\usepackage{knowledge}
\hypersetup{ % Set up hyperref options
colorlinks=true,
}
\knowledgestyle{no}{color=.}
\knowledgedirective*{automatic in command}{autoref,style=no,intro style=no}
\knowledgenewcommand{\foo}{\cmdkl{foo}}
% Colors in math mode, with correct spacing
% https://tex.stackexchange.com/questions/21598/how-to-color-math-symbols
\makeatletter
\def\mathcolor#1#{\@mathcolor{#1}}
\def\@mathcolor#1#2#3{%
\protect\leavevmode
\begingroup
\color#1{#2}#3%
\endgroup
}
\makeatother
\newcommand{\targetcolor}[1]{\mathcolor{green}{#1}}
\begin{document}
\section{A section}
\label{sec:sec}
\Cref{sec:sec} is a section
\[\intro*\foo\]
\[\foo\]
\[\targetcolor{\foo}\]
\end{document}
首先,我仍然希望内部链接(例如部分引用)带有颜色。因此,据我所知,我必须设置colorlinks=true
。
现在的问题是,这个knowledge
包确实很多链接。我希望它的主要用途是让所有符号(例如foo
这里)都引用它们的定义,这样人们如果不确定它们的含义,就可以去查找它们。到目前为止,一切都很好。
我绝对不想让所有这些都变成彩色,因为那会把我的大部分数学知识变成链接颜色——信息量不大。现在knowledge
提供了knowledgestyle
为每个知识命令赋予特定颜色的命令。所以我可以把它放在black
那里,这样它就foo
变成黑色了。
现在的问题是,稍后我想将方程式的不同部分着色——我正在研究编程语言理论,这基本上是语法突出显示。所以我定义了宏targetcolor
并使用它。但这与前两个相冲突:如果我将设置knowledgestyle
为black
,我输了,因为foo
它是黑色而不是绿色。如果我不设置knowledgestyle
,那么链接颜色再次获胜并foo
变为红色。
一种解决方案是在数学环境中停用链接颜色。但我不知道该怎么做。我四处搜索并找到了AtBeginEnvironment
,但我还不够专业,无法理解如何在数学环境中使用它(这些实际上是均匀环境吗?)。
答案1
您可以尝试\everydisplay{\hypersetup{allcolors=.}}
。 \everymath{\hypersetup{allcolors=.}}
然后 hyperref 将选择链接的当前颜色。(完全禁用颜色不起作用,这需要来自 pdfmanagement-testphase 的新 hyperref 驱动程序)。
请注意其他包或代码可以覆盖它。
答案2
另一个解决方案(可能在范围上更精确)是使用宏的修改版本,\cmdkl
以停用链接颜色:
\newcommand\uncolor[1]{\begingroup\hypersetup{allcolors=.}#1\endgroup}
\newcommand\ucmdkl[1]{\uncolor{\cmdkl{#1}}}
\knowledgenewcommand{\foo}{\ucmdkl{foo}}
请注意,wrap=
知识指令不起作用,因为它应用于最内层,这意味着在链接命令内部。