我想使用词汇表包,并且希望能够通过名称引用描述列表项。对于后一个问题,我找到了一个解决方案(LaTeX 中描述列表项的参考名称,接受的答案)。这很好用。将词汇表条目合并到文本中也没有问题,但是在打印词汇表列表时,这会导致错误。
我现在的解决方案:
\documentclass{article}
\usepackage{hyperref}
%%%
% Macro for description
\makeatletter
\let\orgdescriptionlabel\descriptionlabel
\renewcommand*{\descriptionlabel}[1]{%
\let\orglabel\label
\let\label\@gobble
\phantomsection
\edef\@currentlabel{#1}%
%\edef\@currentlabelname{#1}%
\let\label\orglabel
\orgdescriptionlabel{#1}%
}
\makeatother
\usepackage[toc,automake]{glossaries}
\makeglossaries
\newacronym{KG}{KG}{Knowledge Graph}
\begin{document}
\begin{description}
\item[(A1)\label{desc:A1}] Test
\end{description}
As can be seen in \ref{desc:A1} a \gls{KG} is...
\printglossary[type=\acronymtype]
\end{document}
这在注释掉 \printglossary[type=\acronymtype] 或 makeatletter 和 makeatother 之间的所有内容时有效。
错误信息是:
Undefined control sequence.
\gls@start@measuring ...else \let \gls@org@target
\glstarget \let \gls@org@l...
l.5 \setentrycounter[]{page}\glsnumberformat{1}}}
由于我不是 Latex 专家,因此我非常感激任何帮助。我愿意接受所有能够实现项目标签和词汇表组合的解决方案,它们不需要基于此代码。
答案1
您需要恢复descriptionlabel
之前的原始定义\printglossary
。
同时,我提供了比你的更好的代码来抑制\label
参数内部。
\documentclass{article}
\usepackage{hyperref}
\usepackage[toc,automake]{glossaries}
%%%
% Macro for description
\makeatletter
\NewCommandCopy{\orgdescriptionlabel}{\descriptionlabel}
\renewcommand*{\descriptionlabel}[1]{%
\phantomsection
\begingroup\let\label\@gobble\protected@edef\x{\endgroup
\def\noexpand\@currentlabel{#1}%
\def\noexpand\@currentlabelname{#1}%
}\x
\orgdescriptionlabel{#1}%
}
\makeatother
\makeglossaries
\newacronym{KG}{KG}{Knowledge Graph}
\begin{document}
\begin{description}
\item[(A1)\label{desc:A1}] Test
\end{description}
As can be seen in \ref{desc:A1} a \gls{KG} is...
\RenewCommandCopy{\descriptionlabel}{\orgdescriptionlabel}
\printglossary[type=\acronymtype]
\end{document}
请注意,使用\NewCommandCopy
和\RenewCommandCopy
比 安全得多\let
(您需要较新版本的 LaTeX)。 此外\protected@edef
比 更好\edef
。