我没有找到任何地方,我想知道是否有或者是否很难\REnewglossaryentry[2]
为该glossaries
包提供命令。
名称所需命令有点不言自明但下面是我想要实现的 MWE 目标:
% !TEX TS-program = arara
% !TEX encoding = UTF-8 Unicode
% arara: xelatex
% arara: makeglossaries
% arara: xelatex
% arara: makeglossaries
% arara: xelatex
% arara: xelatex
\documentclass[a4paper,12pt,onecolumn,oneside,openright]{book}
\pagestyle{plain}
\usepackage[%
xindy,%
acronym,%
toc=true,%
shortcuts,%
style=altlist,
sanitize={%
name=false,%
description=false,%
symbol=false%
}%
]{glossaries}
\makeglossaries
\newglossaryentry{somethingGloss}{
name = {something},
description = {some\ldots{} description},
sort = {something}
}
\newglossaryentry{aSTH}{
type = {\acronymtype},
name = {aSTH{\protect\glsadd{electroencephalographyGloss}\protect\index{electroencephalography}}},
first = {a something (STH){\protect\glsadd{electroencephalographyGloss}\protect\index{electroencephalography}}},
description = {some\ldots{} description},
see = [see Glossary:]{somethingGloss},
sort = {aSTH}
}
% % % % % %
\newcommand{\REnewglossaryentry}[2]{%
some serious stuff here%
to REset the the key-val list%
for a label given!}
\begin{document}
\glsaddall
\gls{aSTH}, subsequent \gls{aSTH} is \gls{somethingGloss}
\REnewglossaryentry{label}{new key-val list}
% % % % % %
\REnewglossaryentry{aSTH}{ % % % command desired to REset the key-val list!
type = {\acronymtype},
name = {aSTH{\protect\index{electroencephalography}}},
first = {a something (STH)}},
description = {some\ldots{} NEW description},
see = [see Glossary:]{somethingGloss},
sort = {aSTH}
}
\printglossary
\printglossary[type=\acronymtype]
\REnewglossaryentry{somethingGloss}{new key-val list} % allow to
% change the properties for the somethingGloss to be shown
% in the new occurence of the glossary
% (sort of a test for the \REnewglossaryentry)
\printglossary
\end{document}
使用name = {aSTH{\protect\glsadd{electroencephalographyGloss} \protect \index{electroencephalography}}},
可以节省文档正文中的大量打字麻烦,但在排版时却给我带来了严重的麻烦词汇表
我曾尝试制作一个最小化的该问题示例,但(相反)这个小笨蛋工作得很好,与我在关键\protect\glsadd{...}
中引入时我的文档所做的相反name
。在这种情况下,通常是参考文献的页码词汇表都变得扭曲和混乱了。而且我们实际上并不需要词汇表中额外的交叉引用功能,因为我们有关键see=
和\glshyperlink{}
可用的...
name=
因此,在打印之前至少更新first=
一个条目(标签)词汇表将减轻交叉引用循环等问题。
此外,我认为这样的命令可能提供各种其他可用性优势......
答案1
不幸的是,这无法做到,因为它会干扰索引过程。为了解释这一点,让我们考虑以下示例:
\documentclass{article}
\usepackage{glossaries}
\makeglossaries
\newglossaryentry{sample}{name={Sample},%
description={A sample description},%
symbol={\textbf{S}}%
}
\begin{document}
% Page 1
\gls{sample}.
\newpage
% Page 2
\gls{sample}.
\printglossaries
\end{document}
每次使用命令引用条目时,都会\gls
将一行写入文件.glo
。在文档末尾,.glo
文件包含行列表\glossaryentry
。上面的示例生成一个包含以下内容的文件:
\glossaryentry{Sample?\glossaryentryfield{sample}{\glsnamefont{Sample}}{A sample description}{\textbf {S}}|setentrycounter[]{page}\glsnumberformat}{1}
\glossaryentry{Sample?\glossaryentryfield{sample}{\glsnamefont{Sample}}{A sample description}{\textbf {S}}|setentrycounter[]{page}\glsnumberformat}{2}
索引应用程序(makeindex
在本例中)解析此文件并收集每个\glossaryentry{
学期}{
地点}
. 所有具有相同学期部分被整理成单个条目。对的调用makeindex
(通过显式或隐式调用makeglossaries
)会创建.gls
包含词汇表代码的文件。上面的例子生成了以下内容:
\glossarysection[\glossarytoctitle]{\glossarytitle}\glossarypreamble
\begin{theglossary}\glossaryheader
\glsgroupheading{S}\relax \glsresetentrylist %
\glossaryentryfield{sample}{\glsnamefont{Sample}}{A sample description}{\textbf {S}}{\glossaryentrynumbers{\relax
\setentrycounter[]{page}\glsnumberformat{1\delimN 2}}}%
\end{theglossary}\glossarypostamble
就是这个文件被读入的\printglossaries
。对术语的名称、描述或符号的任何更改都不会影响其在词汇表中的显示方式,因为原始的名称、描述和符号已明确写在文件中.gls
。
现在假设在第 3 页上,术语的名称更改为,New Sample
并使用另一个\gls{sample}
。这意味着在运行结束时,.glo
文件现在看起来像:
\glossaryentry{Sample?\glossaryentryfield{sample}{\glsnamefont{Sample}}{A sample description}{\textbf {S}}|setentrycounter[]{page}\glsnumberformat}{1}
\glossaryentry{Sample?\glossaryentryfield{sample}{\glsnamefont{Sample}}{A sample description}{\textbf {S}}|setentrycounter[]{page}\glsnumberformat}{2}
\glossaryentry{Sample?\glossaryentryfield{sample}{\glsnamefont{New Sample}}{A sample description}{\textbf {S}}|setentrycounter[]{page}\glsnumberformat}{3}
从的角度来看makeindex
,词汇表中现在有两个不同的条目,它将像这样分别列出它们:
\glossarysection[\glossarytoctitle]{\glossarytitle}\glossarypreamble
\begin{theglossary}\glossaryheader
\glsgroupheading{S}\relax \glsresetentrylist %
\glossaryentryfield{sample}{\glsnamefont{Sample}}{A sample description}{\textbf {S}}{\glossaryentrynumbers{\relax
\setentrycounter[]{page}\glsnumberformat{1\delimN 2}}}%
\glossaryentryfield{sample}{\glsnamefont{New Sample}}{A sample description}{\textbf {S}}{\glossaryentrynumbers{\relax
\setentrycounter[]{page}\glsnumberformat{3}}}%
\end{theglossary}\glossarypostamble
因此,您现在可以在词汇表中同时获得“样本”和“新样本”。
如果您使用xindy
而不是文件makeindex
的格式.glo
不同,但原理(和结果)是相同的。
从你的问题中我了解到,你的担忧是由于词汇表中的名称中包含\glsadd
或而导致的问题。在这种情况下,为什么不直接在字段中使用这些命令并在字段中省略它们呢?例如:\index
text
name
\newglossaryentry{aSTH}{
type = {\acronymtype},
text = {aSTH{\protect\glsadd{electroencephalographyGloss}\protect\index{electroencephalography}}},
name = {aSTH},
first = {a something (STH){\protect\glsadd{electroencephalographyGloss}\protect\index{electroencephalography}}},
description = {some\ldots{} description},
see = [see Glossary:]{somethingGloss},
sort = {aSTH}
}