新字段上的词汇表条目计数与类型上的打印词汇表冲突

新字段上的词汇表条目计数与类型上的打印词汇表冲突

因此,我不确定为什么使用基于列表的词汇表样式时没有遇到此问题,但是当我在首字母缩略词类型(即名为类别的新字段)中启用特定术语子集的词汇表计数时,似乎存在一些混淆,即术语用法导致取消设置该术语,以便将其包含在列表中。在简单的示例中,第一个和短扩展没有问题,但它们不会打印在列表中:

\documentclass{article}

\usepackage{textgreek}

    \usepackage[savewrites=true,nogroupskip,style=tree]{glossaries-extra}

    \newcommand{\acrinverse}[1]{{\acrshort{#1}}\xspace{\acrlong{#1}}}

    \newglossary[alg]{acronym}{acr}{acn}{List of Acronyms}

\makeindex
\makeglossaries

    \glsenableentrycount % enable \cgls, \cglspl, \cGls, \cGlspl
    \glssetcategoryattribute{acronym}{entrycount}{1}

    % Not using \newabbreviation so redefine \cglsformat
    % to just check for the long field.
    % http://tex.stackexchange.com/questions/319997/problems-with-glsenableentrycount-when-usepackageglossaries-extra-instead-of
    \renewcommand*{\cglsformat}[2]{%
        \ifglshaslong{#1}{\glsentrylong{#1}}{\glsentryfirst{#1}}#2%
    }

\AtEndPreamble{%
    \let\ncgls\gls
    \let\ncglspl\glspl
    \let\ncGls\Gls
    \let\ncGlspl\Glspl

    \let\gls\cgls
    \let\glspl\cglspl
    \let\Gls\cGls
    \let\Glspl\cGlspl
}
%==================================================================================================================================================================

\newglossarystyle{paragraphAcronymList}{%
    \setglossarystyle{tree}% base this style on the list style
    \def\entrysep{\def\entrysep{; }}%
    \renewenvironment{theglossary}%
    {\setlength{\parindent}{0pt}%
        \setlength{\parskip}{0pt plus 0.3pt}}%
    {.}%
    \renewcommand*{\glossentry}[2]{%
        \entrysep\glstarget{##1}{\glossentryname{##1}}:~\space\glossentrydesc{##1}\glspostdescription}%
}

%==================================================================================================================================================================

\newglossaryentry{TNF}{ 
    type={acronym}, 
    category={acronym},
    sort={tumor necrosis factor},  
    name={TNF}, 
    first={tumor necrosis factor (TNF)}, 
    description={tumor necrosis factor}
}   

\glssetnoexpandfield{first}
\glssetnoexpandfield{firstpl}

\newcommand{\TNFalpha}{TNF--{\textalpha}}

\newglossaryentry{TNFalpha}{
    type={acronym},
    category={acronym},
    sort={tumor necrosis factor alpha},
    name={\TNFalpha}, 
    first={\ifglsused{TNF}{\TNFalpha}{\glsunset{TNF}tumor necrosis factor alpha~(\TNFalpha)}},
    description={tumor necrosis factor alpha}
}
\newglossaryentry{HDPE}
{ 
    type={acronym},  
    category={acronym},
    name={HDPE}, 
    short={HDPE}, 
    long={high density polyethylene}, 
    first={high density polyethylene (HDPE)}, 
    description={high density polyethylene}
}

\newglossaryentry{SHG}{%
    type={acronym},
    category={acronym},
    name={SHG},
    short={SHG},
    long={second harmonic generation},
    description={second harmonic generation},
    first={second harmonic generation (SHG)},
    sort={second harmonic generation}
}%

\newglossaryentry{SRS}{%
    type={acronym},
    category={acronym},
    name={SRS},
    short={SRS},
    long={stimulated Raman scattering},
    description={stimulated Raman scattering},
    first={stimulated Raman scattering (SRS)},
    sort={stimulated Raman scattering}
}%

\newglossaryentry{TPEF}{%
    type={acronym},
    category={acronym},
    name={TPEF},
    short={TPEF},
    long={two-photon-excited fluorescence},
    description={two-photon-excited fluorescence},
    first={two-photon-excited fluorescence (TPEF) },
    sort={two-photon-excited fluorescence}
}%


\begin{document}

    \gls{TNFalpha}  
    \gls{TNFalpha}

    \gls{TNF}
    \gls{TNF}

     \gls{HDPE} 
     \gls{HDPE} 

     \gls{TPEF}
     \gls{TPEF} 

     \gls{SHG}   
     \gls{SHG} 

     \gls{SRS} 
     \gls{SRS}

    \printglossary[type=acronym,style=paragraphAcronymList]\clearpage

\end{document} 

答案1

您的构建过程是什么?启用条目计数后,需要先运行两次 LaTeX 才能makeglossaries确定应包含哪些条目。您的 MWE 对我来说,可以很好地处理、、,pdflatex并产生:pdflatexmakeglossariespdflatex

文件图像

所有引用的条目均列在词汇表中。

顺便说一句,方法glossariesglossaries-extra处理条目计数之间有一些区别。使用,您可以直接使用glossaries-extra等,因此您不需要 中的代码。如果所引用的术语已为其类别启用了条目计数,则这将自动使用,否则它将使用原始的。\GlsXtrEnableEntryCounting\gls\AtEndPreamble\cgls\gls

您可以利用 提供的更复杂的缩写处理来glossaries-extra处理您的TNFalpha条目。您可以为依赖于另一个术语的缩写定义缩写样式。例如,如果依赖缩写使用键user1来存储其依赖的术语的标签,则可以使用以下样式定义:

\newabbreviationstyle{dependent}%
{% base it on the long-short style
  \GlsXtrUseAbbrStyleSetup{long-short}%
}
{% base it on long-short
  \GlsXtrUseAbbrStyleFmts{long-short}%
% full form no case-changing format:
  \renewcommand*{\glsxtrfullformat}[2]{%
    % get the dependent label
    \glsfieldfetch{##1}{useri}{\deplabel}%
    % if the dependent term has been used, just use this term's name
    \ifglsused{\deplabel}{\glsentrytext{##1}}%
    {% otherwise, unset dependent term and do long form followed by
     % short form
      \glsunset{\deplabel}\glsentrylong{##1}~(\glsentryshort{##1})%
    }%
  }%
% full plural form no case-changing format:
  \renewcommand*{\glsxtrfullplformat}[2]{%
    % get the dependent label
    \glsfieldfetch{##1}{useri}{\deplabel}%
    % if the dependent term has been used, just use this term's name
    \ifglsused{\deplabel}{\glsentryplural{##1}}%
    {% otherwise, unset dependent term and do long form followed by
     % short form
      \glsunset{\deplabel}\glsentrylongpl{##1}~(\glsentryshortpl{##1})%
    }%
  }%
% full form first letter upper case format:
  \renewcommand*{\Glsxtrfullformat}[2]{%
    % get the dependent label
    \glsfieldfetch{##1}{useri}{\deplabel}%
    % if the dependent term has been used, just use this term's name
    \ifglsused{\deplabel}{\Glsentrytext{##1}}%
    {% otherwise, unset dependent term and do long form followed by
     % short form
      \glsunset{\deplabel}\Glsentrylong{##1}~(\glsentryshort{##1})%
    }%
  }%
% full plural form first letter upper case format:
  \renewcommand*{\glsxtrfullplformat}[2]{%
    % get the dependent label
    \glsfieldfetch{##1}{useri}{\deplabel}%
    % if the dependent term has been used, just use this term's name
    \ifglsused{\deplabel}{\Glsentryplural{##1}}%
    {% otherwise, unset dependent term and do long form followed by
     % short form
      \glsunset{\deplabel}\Glsentrylongpl{##1}~(\glsentryshortpl{##1})%
    }%
  }%
}

然后可以用上述样式为该TNFalpha术语赋予类别标签:dependentdependent

\setabbreviationstyle[dependent]{dependent}

\newacronym[sort={TNF-a},category=dependent,user1=TNF]% dependent on TNF
 {TNFalpha}{TNF--{\textalpha}}{tumor necrosis factor alpha}

这样做的好处是,即使你碰巧用 开头一个句子,它也不会中断\Gls{TNFalpha}。 这样,你密钥开头的代码first就会中断。 以下方法可以正常工作。(构建顺序为pdflatexpdflatexmakeglossariespdflatex。)

\documentclass{article}

\usepackage{textgreek}
\usepackage[abbreviations]{glossaries-extra}

\makeglossaries

\GlsXtrEnableEntryCounting{abbreviation,dependent}{1}

\newglossarystyle{paragraphAcronymList}{%
    \setglossarystyle{tree}% base this style on the list style
    \renewcommand*{\glsgroupskip}{}%
    \def\entrysep{\def\entrysep{; }}%
    \renewenvironment{theglossary}%
    {\setlength{\parindent}{0pt}%
        \setlength{\parskip}{0pt plus 0.3pt}}%
    {.}%
    \renewcommand*{\glossentry}[2]{%
        \entrysep\glstarget{##1}{\glossentryname{##1}}:~\space\glossentrydesc{##1}\glspostdescription}%
}

% style for abbreviations dependent on another abbreviation
% (the dependent term should be supplied in the user1 key)

\newabbreviationstyle{dependent}%
{% base it on the long-short style
  \GlsXtrUseAbbrStyleSetup{long-short}%
}
{% base it on long-short
  \GlsXtrUseAbbrStyleFmts{long-short}%
% full form no case-changing format:
  \renewcommand*{\glsxtrfullformat}[2]{%
    % get the dependent label
    \glsfieldfetch{##1}{useri}{\deplabel}%
    % if the dependent term has been used, just use this term's name
    \ifglsused{\deplabel}{\glsentrytext{##1}}%
    {% otherwise, unset dependent term and do long form followed by
     % short form
      \glsunset{\deplabel}\glsentrylong{##1}~(\glsentryshort{##1})%
    }%
  }%
% full plural form no case-changing format:
  \renewcommand*{\glsxtrfullplformat}[2]{%
    % get the dependent label
    \glsfieldfetch{##1}{useri}{\deplabel}%
    % if the dependent term has been used, just use this term's name
    \ifglsused{\deplabel}{\glsentryplural{##1}}%
    {% otherwise, unset dependent term and do long form followed by
     % short form
      \glsunset{\deplabel}\glsentrylongpl{##1}~(\glsentryshortpl{##1})%
    }%
  }%
% full form first letter upper case format:
  \renewcommand*{\Glsxtrfullformat}[2]{%
    % get the dependent label
    \glsfieldfetch{##1}{useri}{\deplabel}%
    % if the dependent term has been used, just use this term's name
    \ifglsused{\deplabel}{\Glsentrytext{##1}}%
    {% otherwise, unset dependent term and do long form followed by
     % short form
      \glsunset{\deplabel}\Glsentrylong{##1}~(\glsentryshort{##1})%
    }%
  }%
% full plural form first letter upper case format:
  \renewcommand*{\glsxtrfullplformat}[2]{%
    % get the dependent label
    \glsfieldfetch{##1}{useri}{\deplabel}%
    % if the dependent term has been used, just use this term's name
    \ifglsused{\deplabel}{\Glsentryplural{##1}}%
    {% otherwise, unset dependent term and do long form followed by
     % short form
      \glsunset{\deplabel}\Glsentrylongpl{##1}~(\glsentryshortpl{##1})%
    }%
  }%
}

\setabbreviationstyle[abbreviation]{long-short}
\setabbreviationstyle[dependent]{dependent}

\newabbreviation{HDPE}{HDPE}{high density polyethylene}
\newabbreviation{TNF}{TNF}{tumor necrosis factor}
\newabbreviation{SHG}{SHG}{second harmonic generation}
\newabbreviation{SRS}{SRS}{stimulated Raman scattering}
\newabbreviation{TPEF}{TPEF}{two-photon-excited fluorescence}

\newabbreviation[sort={TNF-a},category=dependent,user1=TNF]% dependent on TNF
 {TNFalpha}{TNF--{\textalpha}}{tumor necrosis factor alpha}


\begin{document}

\gls{TNFalpha}  
\gls{TNFalpha}

\gls{TNF}
\gls{TNF}

\gls{HDPE} 
\gls{HDPE} 

\gls{TPEF}
\gls{TPEF} 

\gls{SHG}   
\gls{SHG} 

\gls{SRS} 
\gls{SRS}


\printabbreviations[title={List of Acronyms},style=paragraphAcronymList]

\end{document}

得出的结果为:

文件图像

现在切换顺序进行测试:

\gls{TNF}
\gls{TNF}

\gls{TNFalpha}
\gls{TNFalpha}

文件图像

现在通过删除第二次使用来测试条目计数HDPE

文件图像

内部运作

\cgls以下是有关内部运作的更多信息glossaries-extra.sty

实际\cgls定义为

\@gls@hyp@opt\@cgls

glossaries这是处理可选修饰符(*+)和参数的原始定义。该\gls命令的定义方式类似:

\@gls@hyp@opt\@gls

\@cgls@实际的内部工作由(对于\cgls)和\@gls@(对于)执行\gls。外部的\@cgls\cgls\@gls\gls提供方便的用户界面。

\@cgls@它是由 重新定义的内部命令glossaries-extra。默认情况下,glossaries.sty此内部命令会产生错误,直到启用条目计数时重新定义它。对于glossaries-extra.sty\@cgls@最初被重新定义为\@gls@。这就是为什么默认情况下glossaries-extra,对于\cgls的行为与 完全相同\gls

glossaries-extra当使用时\glsenableentrycount( 内部使用\GlsXtrEnableEntryCounting),\@cgls@设置为\@@cgls@。 定义如下:

\def\@@cgls@#1#2[#3]{%
  \glsxtrifcounttrigger{#2}%
  {%
    \cglsformat{#2}{#3}%
    \glsunset{#2}%
  }% 
  {%
    \@gls@{#1}{#2}[#3]%
  }%
}%

这使用\glsxtrifcounttrigger{标签}确定入口计数是否适用于标签。如果不适用,则\@gls@再次使用,因此\cgls仍然以与此实例完全相同的方式运行\gls。如果触发了条目计数,则根据格式化条目,\cglsformat然后取消设置(\glsunset除了取消设置首次使用标志外,还增加该条目的总计数)。

为了方便\GlsXtrEnableEntryCounting起见

\let\gls\cgls

因此,如果您以后决定添加条目计数,则无需修改文档。现在,不再直接使用\@gls@,而是\gls在内部使用,只有在未触发条目计数机制时\@cgls@才会使用。\@gls@

触发命令定义为:

 \newcommand*{\glsxtrifcounttrigger}[3]{%
 \glshasattribute{#1}{entrycount}%
 {%
   \ifnum\glsentryprevcount{#1}>\glsgetattribute{#1}{entrycount}\relax
    #3%
   \else
    #2%
   \fi
 }%
 {#3}% 
}

因此,它所做的第一件事是检查是否entrycount已为第一个参数中提供的标签的条目设置了属性。如果尚未设置该属性,则它将#3执行\@gls@{选项}{标签}[插入](原始的正常行为\gls[选项]{标签}[插入])。

如果entrycount已设置该属性,则应为整数。总计数从上一次运行开始然后将此条目的( \glsentryprevcount{#1}) 与此属性的值 ( \glsgetattribute{#1}{entrycount}) 进行比较。这是找出此条目在整个文档中使用的总次数的唯一方法。TeX 无法提前查看该条目是否在之后被使用过。这就是为什么在 之前需要两次 LaTeX 调用的原因makeglossaries

这是一个简单的例子:

\documentclass{article}

\usepackage{glossaries-extra}

\makeglossaries

\GlsXtrEnableEntryCounting{foo,bar}{1}

\newglossaryentry{foo1}{name={foo1},
 category=foo,
 first={foo1 (first use)},
 description={foo 1 example}}

\newglossaryentry{foo2}{name={foo2},
 category=foo,
 first={foo2 (first use)},
 description={foo 2 example}}

\newglossaryentry{bar1}{name={bar1},
 category=bar,
 first={bar1 (first use)},
 description={bar 1 example}}

\newglossaryentry{bar2}{name={bar2},
 category=bar,
 first={bar2 (first use)},
 description={bar 2 example}}

\newglossaryentry{example1}{name={example1},
 % no category label provided, implicit category=general
 first={example 1 (first use)},
 description={general 1 example}}

\newglossaryentry{example2}{name={example2},
 % no category label provided, implicit category=general
 first={example 2 (first use)},
 description={general 2 example}}

\begin{document}
First use.

\gls{foo1}, \gls{foo2}.

\gls{bar1}, \gls{bar2}.

\gls{example1}, \gls{example2}.

Second use.

\gls{foo1}.

\gls{bar1}.

\printglossaries
\end{document}

我第一次调用pdflatex将以下行添加到.aux文件中:

\@gls@entry@count{foo1}{2}
\@gls@entry@count{foo2}{1}
\@gls@entry@count{bar1}{2}
\@gls@entry@count{bar2}{1}

这些是文档中使用 、 和 的总次数。条目foo1foo2bar1包括在内,因为它们的类别 ( ) 未设置属性。bar2example1example2generalentrycount

第一次运行\glsentryprevcount返回所有条目的 0,因为之前没有总数。因此,\ifnum中的部分\glsxtrifcounttrigger是比较0>1,它是 false,因此会触发该\cglsformat部分。这意味着该first字段始终被使用,即使foo1bar1实际上已被使用过两次。

该文件的主体内容如下:

文件图片(文本显示于下方引文中)

首次使用。foo1
(首次使用),foo2(首次使用)。bar1
(首次使用),bar2(首次使用)。
示例 1(首次使用),示例 2(首次使用)。
第二次使用。foo1
(首次使用)。bar1
(首次使用)。

下一个pdflatex调用现在具有正确的值,\glsentryprevcount因为它们已在.aux文件中提供。文档现在如下所示:

文件图片(文本显示于下方引文中)

首次使用。foo1
(首次使用),foo2(首次使用)。bar1
(首次使用),bar2(首次使用)。
示例 1(首次使用),示例 2(首次使用)。
第二次使用
。foo1。bar1

对于foo1和来说bar1,前一次运行的总条目数为 2,因此\ifnum条件是测试2>1,其为真,因此它使用常规,\@gls@这意味着它的行为与正常的 一样\gls

foo2在和的情况下bar2,上次运行的总条目数为 1,因此测试现在为1>1,即为假,因此\cglsformat改用 。

glossaries-extra的定义是\cglsformat

\renewcommand*{\cglsformat}[2]{%
  \glsifregular{#1}
  {\glsentryfirst{#1}}%
  {\ifglshaslong{#1}{\glsentrylong{#1}}{\glsentryfirst{#1}}}#2%
}

首先检查条目是否被视为“常规”。这取决于属性的存在和值regular。如果条目类别的regular属性设置为true(或尚未设置),则假定为常规。

使用 定义的条目\newglossaryentry默认为常规条目。某些缩写样式(例如long-short)将regular属性设置为false。这将它们标识为缩写,在使用 等命令显示时,需要与常规条目进行不同的处理\gls

在此示例中,所有条目都是常规的,因此\glsentryfirst使用。如果您希望使用其他字段,则可以重新定义\cglsformat。例如,假设foo2现在定义为:

\newglossaryentry{foo2}{name={foo2},
 category=foo,
 first={foo2 (first use)},
 long={foooooo2},
 description={foo 2 example}}

我可以重新定义\cglsformat跳过对属性的检查regular,而是检查字段long

\renewcommand*{\cglsformat}[2]{%
  \ifglshaslong{#1}{\glsentrylong{#1}}{\glsentryfirst{#1}}#2%
}

我现在明白了

文件图片(文本显示于下方引文中)

首次使用。foo1
(首次使用),foooooo2。bar1
(首次使用),bar2(首次使用)。
示例 1(首次使用),示例 2(首次使用)。
第二次使用
。foo1。bar1

或者,可以使用另一个字段专门用于此值。例如:

\glsaddstoragekey{cformat}{}{\cformatentry}

\renewcommand*{\cglsformat}[2]{%
  \ifglshasfield{cformat}{#1}%
  {\cformatentry{#1}}%
  {%
    \glsifregular{#1}
    {\glsentryfirst{#1}}%
    {\ifglshaslong{#1}{\glsentrylong{#1}}{\glsentryfirst{#1}}}%
  }%
  #2%
}

该条目现在可以定义为:

\newglossaryentry{foo2}{name={foo2},
 category=foo,
 cformat={foooooo2},
 first={foo2 (first use)},
 description={foo 2 example}}

如果您希望不同类别使用不同的触发值,则可以entrycount像这样更改相应类别的属性:

\GlsXtrEnableEntryCounting{foo,bar}{1}
\glssetcategoryattribute{bar}{entrycount}{2}

\cglsformat仅适用于单数无大小写转换版本 ( \gls)。还有类似的命令\cglsplformat(复数无大小写转换)、\cGlsformat(单数首字母大写) 和\cGlsplformat(复数首字母大写)。

description这是一个仅使用或字段的示例,descriptionplural无论条目是否被视为常规:

\renewcommand*{\cglsformat}[2]{%
  \glsentrydesc{#1}#2%
}

\renewcommand*{\cglsplformat}[2]{%
  \glsentrydescplural{#1}#2%
}

\renewcommand*{\cGlsformat}[2]{%
  \Glsentrydesc{#1}#2%
}

\renewcommand*{\cGlsplformat}[2]{%
  \Glsentrydescplural{#1}#2%
}

重置首次使用标志

请注意,条目计数机制通过挂接到修改首次使用标志的宏来工作(这就是为什么条目计数仅设计用于修改首次使用标志的命令的原因)。这意味着\glsreset(因此\glsresetall)不仅重置首次使用标志,而且还重置条目计数器。这可以通过对 MWE 的以下修改来说明:

\documentclass{article}

\usepackage{glossaries-extra}

\makeglossaries

\GlsXtrEnableEntryCounting{foo,bar}{1}

\newglossaryentry{foo1}{name={foo1},
 category=foo,
 first={foo1 (first use)},
 description={foo 1 example}}

\newglossaryentry{foo2}{name={foo2},
 category=foo,
 first={foo2 (first use)},
 description={foo 2 example}}

\newglossaryentry{bar1}{name={bar1},
 category=bar,
 first={bar1 (first use)},
 description={bar 1 example}}

\newglossaryentry{bar2}{name={bar2},
 category=bar,
 first={bar2 (first use)},
 description={bar 2 example}}

\newglossaryentry{example1}{name={example1},
 % no category label provided, implicit category=general
 first={example 1 (first use)},
 description={general 1 example}}

\newglossaryentry{example2}{name={example2},
 % no category label provided, implicit category=general
 first={example 2 (first use)},
 description={general 2 example}}

\begin{document}
First use.

\gls{foo1}, \gls{foo2}.

\gls{bar1}, \gls{bar2}.

\gls{example1}, \gls{example2}.

Second use.

\gls{foo1}.

\gls{bar1}.

Current count value. foo1: \glsentrycurrcount{foo1}, 
foo2: \glsentrycurrcount{foo2}, bar1: \glsentrycurrcount{bar1},
bar2: \glsentrycurrcount{bar2}.

Resetting the first use flag resets the counter.\glsresetall

Back to first use.

\gls{foo1}, \gls{foo2}.

\gls{bar1}, \gls{bar2}.

\gls{example1}, \gls{example2}.

Current count value. foo1: \glsentrycurrcount{foo1}, 
foo2: \glsentrycurrcount{foo2}, bar1: \glsentrycurrcount{bar1},
bar2: \glsentrycurrcount{bar2}.

Count value obtained from previous run. foo1: \glsentryprevcount{foo1}, 
foo2: \glsentryprevcount{foo2}, bar1: \glsentryprevcount{bar1},
bar2: \glsentryprevcount{bar2}.

\printglossaries
\end{document}

文件图片,文本如下

首次使用。foo1
(首次使用),foo2(首次使用)。bar1
(首次使用),bar2(首次使用)。
示例 1(首次使用),示例 2(首次使用)。
第二次使用。foo1
(首次使用)。bar1
(首次使用)。
当前计数值。foo1:2,foo2:1,bar1:2,bar2:1。
重置首次使用标志会重置计数器。
回到首次使用。foo1
(首次使用),foo2(首次使用)。bar1
(首次使用),bar2(首次使用)。
示例 1(首次使用),示例 2(首次使用)。
当前计数值。foo1:1,foo2:1,bar1:1,bar2:1。
从上次运行获得的计数值。foo1:1,foo2:1,bar1:1,bar2:1。

词汇表
示例1一般 1 示例 1
示例2一般 2 示例 1

当前计数值通过 获得\glsentrycurrcount。每次 时计数值增加\glsunset,每次 时重置为零\glsreset。在文档末尾,该值将写入.aux文件,并可在下次运行时使用 检索\glsentryprevcount

因此,在使用文档范围的条目计数机制时,不建议使用\glsreset(或\glsresetall)。如果您要按部分单位重置,则最好使用单位计数版本。例如,上述文档已转换为按 进行单位计数\section

\documentclass{article}

\usepackage{glossaries-extra}

\makeglossaries

\GlsXtrEnableEntryUnitCounting{foo,bar}{1}{section}

\newglossaryentry{foo1}{name={foo1},
 category=foo,
 first={foo1 (first use)},
 description={foo 1 example}}

\newglossaryentry{foo2}{name={foo2},
 category=foo,
 first={foo2 (first use)},
 description={foo 2 example}}

\newglossaryentry{bar1}{name={bar1},
 category=bar,
 first={bar1 (first use)},
 description={bar 1 example}}

\newglossaryentry{bar2}{name={bar2},
 category=bar,
 first={bar2 (first use)},
 description={bar 2 example}}

\newglossaryentry{example1}{name={example1},
 % no category label provided, implicit category=general
 first={example 1 (first use)},
 description={general 1 example}}

\newglossaryentry{example2}{name={example2},
 % no category label provided, implicit category=general
 first={example 2 (first use)},
 description={general 2 example}}

\begin{document}
\section{Sample Section}
First use.

\gls{foo1}, \gls{foo2}.

\gls{bar1}, \gls{bar2}.

\gls{example1}, \gls{example2}.

Second use.

\gls{foo1}.

\gls{bar1}.

Current count value. foo1: \glsentrycurrcount{foo1}, 
foo2: \glsentrycurrcount{foo2}, bar1: \glsentrycurrcount{bar1},
bar2: \glsentrycurrcount{bar2}.

\section{Another Section}
Resetting the first use flag.\glsresetall

Back to first use.

\gls{foo1}, \gls{foo2}.

\gls{bar1}, \gls{bar2}.

\gls{example1}, \gls{example2}.

Current count value. foo1: \glsentrycurrcount{foo1}, 
foo2: \glsentrycurrcount{foo2}, bar1: \glsentrycurrcount{bar1},
bar2: \glsentrycurrcount{bar2}.

Count value obtained from previous run for the current section.
foo1: \glsentryprevcount{foo1}, 
foo2: \glsentryprevcount{foo2}, bar1: \glsentryprevcount{bar1},
bar2: \glsentryprevcount{bar2}.

Total count value obtained from previous run for the entire document.
foo1: \glsentryprevtotalcount{foo1}, 
foo2: \glsentryprevtotalcount{foo2}, bar1: \glsentryprevtotalcount{bar1},
bar2: \glsentryprevtotalcount{bar2}.

\printglossaries
\end{document}

现在产生:

文件图片,文本如下

1 个示例部分
第一次使用。foo1
(第一次使用),foo2(第一次使用)。bar1
(第一次使用),bar2(第一次使用)。
示例 1(第一次使用),示例 2(第一次使用)。
第二次使用。foo1。bar1

当前
计数值。foo1:2,foo2:1,bar1:2,bar2:1。

2 另一节
重置首次使用标志。
返回首次使用。foo1
(首次使用),foo2(首次使用)。bar1
(首次使用),bar2(首次使用)。
示例 1(首次使用),示例 2(首次使用)。
当前计数值。foo1:1,foo2:1,bar1:1,bar2:1。
从当前部分的前一次运行中获得的计数值。foo1:1,foo2:1,bar1:1,bar2:1。
从前一次运行中获得的整个文档的总计数值。foo1:3,foo2:2,bar1:3,bar2:2。

词汇表
酒吧1酒吧 1 示例 1
示例1一般 1 示例 1
示例2一般 2 示例 1
foo1foo 1 示例 1

相关内容