这是一个后续问题。突出显示文本中第一个引用的工作示例可以在这里找到
但是,如何处理参考列表仍是一个悬而未决的问题。目前,答案忽略了列表,并且不跟踪它们的出现。我需要突出显示完整的列表,并跟踪突出显示,就好像参考是独立的一样。所以如果我说
\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
祝你今天过得愉快!