知识包着色

知识包着色

我在使用该软件包时遇到了一个比较复杂的问题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并使用它。但这与前两个相冲突:如果我将设置knowledgestyleblack,我输了,因为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=知识指令不起作用,因为它应用于最内层,这意味着在链接命令内部。

相关内容