词汇表 newacronym 按短字段排序,即使短字段作为命令给出

词汇表 newacronym 按短字段排序,即使短字段作为命令给出

对于我的文档,我喜欢将下标和上标(德语:Indizes)定义为命令,以便\newcommand{}{}为常用缩写创建层叠的快捷方式结构。这具有巨大的优势,我可以用一行代码轻松更改所有相关的缩写和下标。例如:

  • 热能储存的缩写 TES\newcommand{\TES}{TES}
  • 也可以定义为下标或数学变量,以\newcommand{\TESi}{\mathit{\TES}}获得漂亮的数学文本格式
  • 在文本中使用\TES{}
  • 用于数学符号,表示$V_{\TESi}$TES 的体积
  • 添加到下标和上标词汇表中\newacronym[type=indizes]{tes}{$\TESi$}{thermal energy storage}

最后一步造成了一些麻烦:对条目进行排序时,glossaries似乎是按命令的名称而不是命令生成的字符串。
这意味着,如果我将初始缩写从 重命名newcommand{\TES}{TES}newcommand{\TES}{ES},则词汇表将按\TES而不是排序ES。当缩写未由新命令定义被添加(在相当多非常明显的情况下,根本没有其他有用的缩写),排序完全失败。
添加\newacronym[type=indizes,sort=ES]有效,但我还是更喜欢隐式解为了灵活性,例如\newacronym[type=indizes,sort=\TES],它再次按TES而不是排序ES......

我的最小工作示例是(是的,我可以删除词汇表样式的定义,但这样阅读起来更容易:)):

\documentclass[a4paper,oneside,11pt,parskip=half]{scrreprt}

\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{amsmath}

\usepackage[acronym, toc, nonumberlist, nopostdot, nomain, nogroupskip]{glossaries}

\newglossary[ilg]{indizes}{iyi}{iyg}{Indizes}

\setlength{\glsdescwidth}{12cm}
\makeglossaries
\glsnoexpandfields

% Stil für Indizes und Abkürzungen
\newglossarystyle{fixedglslong}{%
    \setglossarystyle{long}% base this style on the list style
    \renewenvironment{theglossary}{% Change the table type --> 3 columns
        \begin{longtable}{p{2cm}p{14.5cm}}}%
        {\end{longtable}}%
    %
    \renewcommand*{\glossentry}[2]{%        Change the displayed items
        \glstarget{##1}{\glossentryname{##1}} %
        & \glossentrydesc{##1} \tabularnewline
    }
}

%% abbreviations
\newcommand{\TES}{ES}   
\newcommand{\HT}{HT}        
\newcommand{\NT}{NT}
%% sub- and superscripts
\newcommand{\TESi}{\mathit{\TES}}
\newcommand{\HTi}{\mathit{\HT}}
\newcommand{\NTi}{\mathit{\NT}}
\newcommand{\IT}{I}
% glossary for sub- and superscripts:
\newacronym[type=indizes]{TES}{$\TESi$}{thermal energy storage}
\newacronym[type=indizes]{HT}{$\HTi$}{high temperature}
\newacronym[type=indizes]{NT}{$\NTi$}{low temperature}
\newacronym[type=indizes]{itens}{$I$}{inertia tensor}

\begin{document}

\glsaddall
\printglossary[type=indizes, style=fixedglslong]

\end{document}

有没有什么方法可以正确地对项目进行排序,这意味着通过文档中实际打印的字符串?或者我能否以某种方式为 提供一个额外的排序键newacronym,因为 是可能的\newglossaryentry?我查看了词汇表文档并尝试了各种变体,但似乎不起作用。
切换到 xindy 可以使其工作吗?可能出现哪些意想不到的副作用?

我希望词汇表的排序看起来像这样:

  1. ES thermal energy storage
  2. HT high temperature
  3. I inertia tensor
  4. NT low temperature

答案1

好的,我找到答案了。如果我将其设置sanitizesort=false为词汇表包选项,则排序键将展开:

\usepackage[
    acronym, toc, nonumberlist, nopostdot, nomain, nogroupskip, 
    sanitizesort=false  % false expands commands
]{glossaries}

一些明确定义的非命令条目似乎仍然存在一些排序问题,但总体而言它运行良好。

编辑:现在我知道了 Latex 中“sanitizing”的意思,因此搜索了它,找到了这个问题/回答处理同样的问题。

相关内容