作为词汇表条目内容的动态变量

作为词汇表条目内容的动态变量

基于宏定义这里,我想使用它来创建一个带有描述变量的词汇表。这是我的 MWE:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{glossaries}
\makeglossaries
 \newcommand\referenceSente{}
 \newcommand{\defReferenceSente}[1]
    {\gdef\referenceSente{#1}} 

% MACRO FOR DEFINITION      
\newcommand{\keyDef}[2]{%
    %CREATE THE GLOSSARY ENTRY
    \newglossaryentry{#1}{name={#1},description={%
        #2\\(\referenceSente)
        }}
    % PRINT THE DEFINITION
    \textbf{\gls{#1}} : \textit{#2}\par\vspace{.3cm}
}
\newenvironment{myEnvironment}[1]{\defReferenceSente{#1}}{\par}

\begin{document}

\begin{myEnvironment}{firstReference}
\keyDef{first term}{first definition}
\end{myEnvironment}

\begin{myEnvironment}{secondReference}  
\keyDef{second term}{second definition}
\end{myEnvironment}

\printglossaries
\end{document}

结果是:

平均能量损失

该命令\keyDef{<term>}{<definition>}用于创建一个定义,该定义 1) 打印在文档中,2) 添加到词汇表中,后跟referenceSente括号中的变量的当前值。

问题在于,对于词汇表的第一个条目,括号内的内容应该是 (firstReference) 而不是 (secondReference)。似乎在编译代码时,词汇表对所有项目都使用变量的最后一个值,而不是声明定义时的值。

我不知道如何“询问词汇表”使用正确的值,而不是文档中最后记录的值。

答案1

默认情况下,定义条目时不会扩展description密钥(以及其他类似密钥的密钥)。这样做是为了保护可能在条目中使用的任何脆弱命令。要打开扩展,您需要使用参数为name\glssetexpandfield内部的存储值时使用的字段。在大多数情况下,这与键的名称相同,但也有一些例外,这些例外在“键到字段映射”表中列出。“扩张”手册的部分。在描述的情况下,该字段被称为desc

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{glossaries}
\makeglossaries

\glssetexpandfield{desc}

 \newcommand\referenceSente{}
 \newcommand{\defReferenceSente}[1]
    {\gdef\referenceSente{#1}} 

% MACRO FOR DEFINITION      
\newcommand{\keyDef}[2]{%
    %CREATE THE GLOSSARY ENTRY
    \newglossaryentry{#1}{name={#1},description={%
        #2\\(\referenceSente)
        }}
    % PRINT THE DEFINITION
    \textbf{\gls{#1}} : \textit{#2}\par\vspace{.3cm}
}
\newenvironment{myEnvironment}[1]{\defReferenceSente{#1}}{\par}

\begin{document}

\begin{myEnvironment}{firstReference}
\keyDef{first term}{first definition}
\end{myEnvironment}

\begin{myEnvironment}{secondReference}  
\keyDef{second term}{second definition}
\end{myEnvironment}

\printglossaries
\end{document}

得出的结果为:

结果图像

如果您确实打开了扩展,则需要记住在定义词汇表条目时保护任何易碎命令。

相关内容