词汇表 - 如何定义引用词汇表条目的新缩写词

词汇表 - 如何定义引用词汇表条目的新缩写词

我的文档中有许多首字母缩略词,其中一些的含义比其他的更复杂,我想在词汇表中为它们添加一个附带的链接条目。我发现,为了定义这些交叉引用的首字母缩略词,我无法使用常规命令\newacronym,而必须使用定义的键值对newglossaryentrytype=\acronymtype

一切似乎都很好,直到我注意到我的一些首字母缩略词出现在我的文档中,尽管我没有引用它们。因此,经过一些调整/测试后,我发现键see是问题的根源。我确实喜欢键值的功能see,所以我正在寻找我报告的问题的解决方案,而不是放弃这个想法。

当首字母缩略词引用词汇表时,我会使用see键值对来告诉它指向哪个词汇表条目。看来,这个键值的副作用是,它强制将首字母缩略词显示在文档列表中,Acronyms即使它没有在文档正文中引用。就我而言,这是我所不想要的东西。

下面是一个示例文档,它演示了我如何处理交叉引用需求并演示了问题。只需(取消)注释这些行see=[Glossary:]{apig},\gls{api}然后重建即可。

注释掉see后,行为是正确的。Acronym 和 Glossary 在\gls{api}处于活动状态时都有 API 条目,而在未处于活动状态时都没有。取消注释see,现在无论 的状态如何,您都将拥有 Acronym 条目\gls{api}(包括词汇表:API指向任何内容的链接),并且当\gls{api}处于活动状态时,将如预期那样出现词汇表条目,并且链接正确。TCP知识产权首字母缩略词很好用。

有没有什么办法可以修复这个问题?

更新 似乎这可能需要bib2gls,需要安装,但我似乎没有它,因为我无法运行glossaries-user.pdf(p25) 中的示例。因此,我看不到结果会是什么。

目前我不知道如何安装 bib2gls,尽管可以从加拿大运输安全局并且我已经安装了必要的 Java (v8+)。

我正在使用 MacOS Catalina 10.15.6 和 Homebrew。我已经mactex-20170524.pkg安装并使用了 TexStudio 3.0.1。

        \documentclass{article}
        \usepackage{hyperref}
        \usepackage[acronym]{glossaries}
        %\usepackage[nonumberlist,acronym]{glossaries} %% nonumberlist also turns off 'see' .
        %\usepackage{glossaries-extra}
        %\usepackage{glossaries-prefix}
        
        \makeglossaries
        %% Set flag to include Glossary in the ToC
        %\glstoctrue
        % Set acronyms such that on first use, the whole phrase is shown along with the acronym.
        \setacronymstyle{long-short}
        % 
        \newglossaryentry{api}{
            type=\acronymtype,
            name={API},
            description={Application Programming Interface},
            first={Application Programming Interface (API)\glsadd{apig}},
             see=[Glossary:]{apig},
            %% 'see' adds a note at the end of the acronym description
            %% 'see' is turned off by global or local 'nonumberlist'
            %% Using the example above it writes 'Glossary: API' with Glossary: in italics.
        }
        
        \newglossaryentry{apig}{
            name={API},
            description={An Application Programming Interface (API) is a particular set of rules and specifications that a software program can follow to access and    make use of the services and resources provided by another particular software program that implements that API}
        }
        
        \newacronym{ip}{IP}{Internet Protocol}
        \newacronym{lan}{LAN}{Local Area Network}
        \newacronym{smp}{SMP}{Symmetric Multi-Processing}
        \newacronym{tcp}{TCP}{Transmission Control Protocol}
        
        
        \begin{document}
        
        \printglossary[type=\acronymtype]
        %%% \newpage just to demonstrate that links are correct
        \newpage
        \printglossary[type=main]
        \newpage
        
        \noindent
        \gls{tcp}
        sits on top of
        \gls{ip}
        , and you need an
        %\gls{api}
        . \\
        \\
        \noindent
        Just to repeat, 
        \gls{tcp}
        sits on top of
        \gls{ip}
        , and you need an
        %\gls{api}
        .

        \end{document}

答案1

以下应该有效:

\documentclass{article}
\usepackage{hyperref}
\usepackage[acronym]{glossaries}

\makeglossaries

\glsaddstoragekey {glossterm} {}{\glossterm}

\newglossarystyle{optgloss} {
    \setglossarystyle{list}
    \let\oldglossentrydesc\glossentrydesc

    \renewcommand* {\glossentrydesc} [1] {%
        \oldglossentrydesc{##1}%
        \ifglshasfield {glossterm} {##1} {%
            \glsunset{\glscurrentfieldvalue}%
            \ \textit{Glossary:}~\gls[format=glsignore]{\glscurrentfieldvalue}%
        }{}%
    }
}

\newacronymstyle{optgloss}
    {%
        \GlsUseAcrEntryDispStyle{long-short}%
        \ifglshasfield {glossterm} {\glslabel} {%
            \glsadd{\glscurrentfieldvalue}%
        }%
    }
    {\GlsUseAcrStyleDefs{long-short}}

\setacronymstyle{optgloss}

\newglossaryentry{api}{
    type=\acronymtype,
    name={API},
    description={Application Programming Interface},
    first={Application Programming Interface (API)},
    glossterm={apig}
}

\newglossaryentry{apig}{
    name={API},
    description={An Application Programming Interface (API) is a particular set of rules and specifications that a software program can follow to access and    make use of the services and resources provided by another particular software program that implements that API}
}

\newacronym{ip}{IP}{Internet Protocol}
\newacronym{lan}{LAN}{Local Area Network}
\newacronym{smp}{SMP}{Symmetric Multi-Processing}
\newacronym{tcp}{TCP}{Transmission Control Protocol}


\begin{document}

    \printglossary[type=\acronymtype,style=optgloss]
    %%% \newpage just to demonstrate that links are correct
    \newpage
    \printglossary[type=main]
    \newpage

    \noindent
    \gls{tcp}
    sits on top of
    \gls{ip}
    , and you need an
    \gls{api}
    . \\
    \\
    \noindent
    Just to repeat, 
    \gls{tcp}
    sits on top of
    \gls{ip}
    , and you need an
    \gls{api}
    .

\end{document}

glossterm您可以通过添加一个键并将其设置为词汇表条目的名称来链接到首字母缩略词的词汇表条目,例如apig(我希望它是一只可爱的小猪!

相关内容