组合词汇表和描述项标签时出错

组合词汇表和描述项标签时出错

我想使用词汇表包,并且希望能够通过名称引用描述列表项。对于后一个问题,我找到了一个解决方案(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

在此处输入图片描述

相关内容