词汇表和 REnewglossaryentry

词汇表和 REnewglossaryentry

我没有找到任何地方,我想知道是否有或者是否很难\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或而导致的问题。在这种情况下,为什么不直接在字段中使用这些命令并在字段中省略它们呢?例如:\indextextname

\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}
    }

相关内容