基于宏定义这里,我想使用它来创建一个带有描述变量的词汇表。这是我的 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}
得出的结果为:
如果您确实打开了扩展,则需要记住在定义词汇表条目时保护任何易碎命令。