突出显示文本中第一次出现的参考或参考列表

突出显示文本中第一次出现的参考或参考列表

这是一个后续问题。突出显示文本中第一个引用的工作示例可以在这里找到

突出显示文本中第一次出现的引用

但是,如何处理参考列表仍是一个悬而未决的问题。目前,答案忽略了列表,并且不跟踪它们的出现。我需要突出显示完整的列表,并跟踪突出显示,就好像参考是独立的一样。所以如果我说

\cref{eq:1,eq:2,eq:3}

我会被强调

公式(1)至(3)

如果我再次引用其中一个方程式,它们将不会突出显示,因为它们已经在列表中突出显示了?

谢谢大家的帮助,祝大家新年快乐!

答案1

我找到了一种通过 xparse 和 splitlist 使这个东西工作的方法。我解析列表并通过处理逗号分隔的列表来设置边注。

对于任何感兴趣的人,以下都是可行的解决方案:

\usepackage{xstring}
\usepackage{xparse}
\makeatletter
\NewDocumentCommand\foo{>{\SplitList{,}}m}{{\ProcessList{#1}\myphantom}}
  \newcommand\myphantom[1]{%
  \ifcsname marginnote@#1\endcsname
  \else
  \expandafter\gdef\csname marginnote@#1\endcsname{}}
%Redefine \cref so that it will make a margin note if the passed label is referenced for the first time.
    \let\oldcref=\cref
\def\cref#1{%
    \IfSubStr{#1}{,}{%
      \ifcsname creflnote@#1\endcsname%
        \oldcref{#1}%
      \else
        {\foo{#1}}%
        \myul{2pt}{0.5pt}{1}{\oldcref{#1}}%
        \expandafter\gdef\csname creflnote@#1\endcsname{}%
        \fi
    }{%
    %check if the label has already been referenced.
    \ifcsname marginnote@#1\endcsname
        %already exists...therefore not the first citation
        \oldcref{#1}%
    \else
        \myul{2pt}{0.5pt}{1}{\oldcref{#1}}%}
        \expandafter\gdef\csname marginnote@#1\endcsname{}%first citation...with this defined, will not underline again
    \fi
    }}
\makeatother

祝你今天过得愉快!

相关内容