我想制作一个文本词汇表,其中有时会描述一些操作。其中之一就是“上划线”操作。
在文中我想这样写道:
\gls{Overline}[u]
这样,只有该命令创建的栏\overline
才会链接到词汇表,而不是其下的参数(此处u
)。
下面的图片显示了我想要的结果(红色链接):
以下代码主要受到以下启发使用 \newglossary 在词汇表中使用可选参数的符号问题:
\documentclass{article}
\usepackage[hidelinks, colorlinks=true]{hyperref}
\usepackage[abbreviations]{glossaries-extra}
\makeglossaries
\glsnoexpandfields
\newcommand*{\glsdefaultarg}{i}
\newcommand*{\glsarg}{\glsdefaultarg}
\newglossaryentry{Overline}{
category=arg,% requires an argument
name=\ensuremath{\overline{\glsdefaultarg}},
text=\ensuremath{\overline{\glsarg}},
description={Overline description}
}
% modify the entry's format
\preto\glsentryfmt{%
\glsifcategory{\glslabel}{arg}% if category set to "arg"
{%
\ifdefempty\glsinsert
{\let\glsarg\glsdefaultarg}%
{%
\let\glsarg\glsinsert
\let\glsinsert\empty
}%
}%
{}%
}
\begin{document}
\(\gls{Overline}\)
\phantom{}
\(\gls{Overline}[a]\)
\phantom{}
\(\gls{Overline}[(u, v)]\)
\phantom{}
\(\gls{Overline}[f]\)
\phantom{}
\(\gls{Overline}\)
\printglossaries
\end{document}
它输出的是:
如您所见,由其生成的栏\overline
和其下方的文本均链接到词汇表(由于hyperref
包的原因,以红色显示)。
请注意,打印的词汇表是正确的。
关键思想可能是创建一个模拟\overline
结果的宏(参见此处的 tikz:更粗的 \overline),并自定义文本中的词汇表格式。但我真的不知道该怎么做。
感谢您阅读我的文章,祝您有美好的一天
答案1
我找到了一种模拟\overline
行为并使线条可点击和着色的方法。
虽然它很丑陋,但它确实有效,所以我标记了问题的答案。但如果有人能用更简洁的方法来做这件事,我会非常高兴。
代码(请注意,我创建了一个更简单的 MWE,没有词汇表arg
类别)。此外,此处词汇表文本条目的颜色与其他链接的颜色不同(词汇表部分的页码)。
% ============================================================================ %
% CONFIG %
% ============================================================================ %
\documentclass{article}
\usepackage[hidelinks, colorlinks=true]{hyperref}
\usepackage[abbreviations]{glossaries-extra}
\usepackage{tikz}
\usetikzlibrary{calc} % because of 'let' in tikzpicture env.
% ============================================================================ %
% HYPERREF %
% ============================================================================ %
\newcommand{\customglshrefcol}{blue} % Cleaner bc we will reuse this command
% ============================================================================ %
% GLOSSARIES %
% ============================================================================ %
\makeglossaries%
% ---------------------------------------------------------------------------- %
% Link Color %
% ---------------------------------------------------------------------------- %
\renewcommand*{\glstextformat}[1]{\textcolor{\customglshrefcol}{#1}}
% ---------------------------------------------------------------------------- %
% Entry %
% ---------------------------------------------------------------------------- %
\newcommand{\overbardefault}{\ensuremath{\,\cdot\,}}
\newglossaryentry{overbar}{
name=\ensuremath{\overline{\overbardefault}},% for the printglossaries
text={},% because \Overline command will replace \gls behaviour
description={Overline description}
}
% ---------------------------------------------------------------------------- %
% Simulate Overline %
% ---------------------------------------------------------------------------- %
\newcommand\Overline[2][0.5pt]{%
\begin{tikzpicture}[baseline=(a.base)]
%
% The text under the line
%
\node[inner xsep=0pt,inner ysep=1.5pt] (a) {$#2$};
%
% Write link on the overline
%
\path let
\p1=(a.north west),
\p2=(a.north east),
\n1={veclen(\x2-\x1,\y2-\y1)} in
node[outer sep=0pt,inner xsep=0pt,align=left,anchor=west,minimum width=\n1,minimum height=1ex]
at (a.north west) (link) {% \glshyperlink[<text>]{<label>}
\glshyperlink[%
\gls{overbar}\hphantom{\hspace*{\n1}}% we use \gls to add page number in Glossary section
]{overbar}%
};
%
% Draw overline
%
\draw[line width= #1, color=\customglshrefcol] (a.north west) -- (a.north east);
\end{tikzpicture}%
}
% ============================================================================ %
% BODY %
% ============================================================================ %
\begin{document}
\(\Overline{\overbardefault} \quad \overline{\overbardefault}\)
\phantom{}
\(\Overline{a} \quad \overline{a}\)
\phantom{}
\(\Overline{(u, v)} \quad \overline{(u, v)}\)
\phantom{}
\(\Overline{f} \quad \overline{f}\)
\printglossaries
\end{document}
它输出:
代码受到以下方面的启发:https://tex.stackexchange.com/a/526333/232319