使用大写命令来表示词汇表中的缩写

使用大写命令来表示词汇表中的缩写

我经常使用范围扩展在文本中。因此我想用关于。当缩写首次出现在章节中时,应这样解释:范围扩展(RE)在我的词汇表中,我希望同时有这两个词条,关于范围扩展. 为了让读者更容易找到解释关于,我将描述链接到了范围扩展使用\gls

\newacronym{RE}{RE}{\gls{RangeExpansion}}
\newglossaryentry{RangeExpansion}{
    name        = {range expansion},
    description = {A range expansion ...}
}

现在我可以\gls{RE}在我的文本中使用了。每章第一次发生这种情况时,范围扩展(RE)然后它使用关于。在章节开头,我在句子开头使用了术语 - 这使我使用\Gls{RE},因为我希望句子以大写字母开头。但使用\Gls导致以下错误消息:

缺少 \endcsname 插入 \Glspl{RE}

词汇表:词汇表条目“\MakeUppercase {R}angeExpansion”尚未定义。\Glspl{RE}\index

当我不链接的解释时RE\Gls效果很好:

\newacronym{RE}{RE}{range expansion}
\newglossaryentry{RangeExpansion}{
    name        = {range expansion},
    description = {A range expansion ...}
}

我也尝试过使用\newacronym{RE}{RE}{\Gls{RangeExpansion}},但根本不起作用。

我如何在缩写词的描述中调用链接RangeExpansion,以便\gls \Gls工作?

答案1

首字母大写的命令,例如\Gls,使用\makefirstuc要求其参数要么是文本,要么是形式\\命令{文本}(例如,\makefirstuc{\emph{text}}相当于\emph{\MakeUppercase{t}ext})。您的代码试图执行的操作是\makefirstuc{\gls{RangeExpansion}}变为,并且由于是无效标签而\gls{\MakeUppercase{R}angeExpansion}发生错误。\MakeUppercase{R}angeExpansion

您的定义的另一个问题是,您获得了嵌套链接,其中\gls{RE}试图成为指向首RE字母缩略词列表中的条目和RangeExpansion主词汇表中的条目的超链接。

解决上述两个问题的更好的方法是执行以下操作:

\documentclass{article}

\usepackage[colorlinks]{hyperref}
\usepackage[acronym,description]{glossaries}

\makeglossaries

% Define command to create linked entries
% Syntax:
% \newlinkedacr[options]{entry-label}{acr-label}{short}{long}{description}
\newcommand*{\newlinkedacr}[6][]{%
  \newglossaryentry{#2}{name={#5},description={#6},#1}%
  \newacronym[description={\gls{#2}}]{#3}{#4}{#5}%
}

\newlinkedacr
 {RangeExpansion}% main entry label
 {RE}% acronym label
 {RE}% abbreviation
 {range expansion}% long form
 {A range expansion etc}% description

\begin{document}

First use: \gls{RE}. Subsequent use: \gls{RE}.

\glsresetall
First use: \Gls{RE}. Subsequent use: \Gls{RE}.

\printglossaries

\end{document}

生成的文档的图像

在这里,缩写列表中的描述构成了指向主词汇表中条目的超链接。文档正文中的缩写链接到缩写列表中的条目。如果您更喜欢在第一次使用时使用长格式链接到主词汇表而不是缩写列表,那么尽管这更复杂,但也可以实现。以下示例至少需要 v4.0 的glossaries

\documentclass{article}

\usepackage[colorlinks]{hyperref}
\usepackage[acronym,hyperfirst=false]{glossaries}

\makeglossaries

% Define command to create linked entries
% Syntax:
% \newlinkedacr[options]{entry-label}{acr-label}{short}{long}{description}
\newcommand*{\newlinkedacr}[6][]{%
  \newglossaryentry{#2}{name={#5},description={#6},#1}%
  \newacronym[description={\glshyperlink{#2}},user1={#2}]{#3}{#4}{#5}%
}

\renewcommand*{\CustomAcronymFields}{name={\the\glsshorttok}}

\renewcommand*{\SetCustomDisplayStyle}[1]{%
  \defglsentryfmt[#1]{%
    \ifdefempty\glscustomtext
    {%
      \ifglsused\glslabel
      {% subsequent use
        \glsgenentryfmt
      }%
      {% First use
       % Get the label of the corresponding main entry (stored in
       % user1 field)
        \edef\mainlabel{\glsentryuseri{\glslabel}}%
        % If empty, then there's no linked entry
        \ifdefempty\mainlabel
        {% use generic format
          \glsgenentryfmt
        }%
        {%
          \glsifplural
          {% plural form
            \glscapscase
            {% no case change
               \glshyperlink[\glsentrylongpl{\glslabel}\glsinsert]{\mainlabel}%
               \space (\glsentryshortpl{\glslabel})%
            }%
            {% first letter uppercase
               \glshyperlink[\Glsentrylongpl{\glslabel}\glsinsert]{\mainlabel}%
               \space (\glsentryshortpl{\glslabel})%
            }%
            {% all caps
               \glshyperlink[\MakeTextUppercase{%
                 \glsentrylongpl{\glslabel}\glsinsert}]{\mainlabel}%
               \MakeTextUppercase{\space (\glsentryshortpl{\glslabel})}%
            }%
          }%
          {% singular form
            \glscapscase
            {% no case change
               \glshyperlink[\glsentrylong{\glslabel}\glsinsert]{\mainlabel}%
               \space (\glsentryshort{\glslabel})%
            }%
            {% first letter uppercase
               \glshyperlink[\Glsentrylong{\glslabel}\glsinsert]{\mainlabel}%
               \space (\glsentryshort{\glslabel})%
            }%
            {% all caps
               \glshyperlink[\MakeTextUppercase{%
                \glsentrylong{\glslabel}\glsinsert}]{\mainlabel}%
               \MakeTextUppercase{\space (\glsentryshort{\glslabel})}%
            }%
          }%
          % add main entry to glossary
          \glsadd{\mainlabel}%
        }%
      }%
    }%
    {% \glsdisp used
       \glscustomtext
    }%
  }%
}

\SetCustomStyle

\newlinkedacr
 {RangeExpansion}% main entry label
 {RE}% acronym label
 {RE}% abbreviation
 {range expansion}% long form
 {A range expansion etc}% description

\begin{document}

First use: \gls{RE}. Subsequent use: \gls{RE}.

\glsresetall
First use: \Gls{RE}. Subsequent use: \Gls{RE}.

\printglossaries

\end{document}

得出的结果为:

生成的文档的图像

其中第一次使用长格式超链接到主词汇表中的条目,随后使用首字母缩略词链接到首字母缩略词列表中的条目,首字母缩略词列表中的描述链接到主词汇表中的相应条目。

如果主词汇表中的条目没有以这种方式链接到首字母缩略词列表,则可能需要执行此操作\glsunsetall[main]以抵消选项的影响hyperfirst=false

相关内容