![术语表和 xindy 忘记了一些符号](https://linux22.com/image/389718/%E6%9C%AF%E8%AF%AD%E8%A1%A8%E5%92%8C%20xindy%20%E5%BF%98%E8%AE%B0%E4%BA%86%E4%B8%80%E4%BA%9B%E7%AC%A6%E5%8F%B7.png)
我想利用glossaries
软件包创建一个大型命名法。我还想按符号对命名法的元素进行排序,因为我发现这在查找信息时更容易。我还想使用,xindy
因为我必须处理重音字符。
我的问题在于,我的命名体系非常庞大,有些符号可能完全相同(至少目前如此)。这种排序方式xindy
会产生一个问题:重复的符号symbols
不会出现在命名体系中(fbis
例如这里)。我找到了一种清理排序的方法页但是这个解决方案意味着要按描述进行排序,而这对我来说并不可取。
因此,我正在寻找一种解决方案来保留:即使存在冗余符号,也能glossaries
按xindy
符号排序。name
梅威瑟:
\documentclass{book}
\usepackage{amsmath}
\usepackage[nogroupskip,nonumberlist,nomain, xindy]{glossaries-extra}
\newglossary[slg]{symbols}{sym}{sbl}{Nomenclature}
\makeglossaries
% To improve the sorting by description, otherwise when symbols are the same the second is not printed.
%\glssanitizesorttrue
%\renewcommand{\glsprestandardsort}[3]{%
% \glsfieldfetch{#3}{desc}{#1}%
% \glsdosanitizesort
%}
\newglossaryentry{xi}{type=symbols,
name={\ensuremath{ \xi }},
description={space variable} }
\newglossaryentry{xii}{type=symbols,
name={\ensuremath{ \xi_i }},
description={discretized space variable} }
\newglossaryentry{f}{type=symbols,
name={\ensuremath{ f }},
description={function of space variable} }
\newglossaryentry{fbis}{type=symbols,
name={\ensuremath{ f }},
description={another function of space variable} }
\newglossaryentry{fi}{type=symbols,
name={\ensuremath{ f_i }},
description={discretized function} }
\begin{document}
A document that contains \gls{f}, \gls{xi}, \gls{fi} and \gls{xii}, but also a second \gls{fbis}.
You can notice that `fbis` is missing in the nomenclature.
\printglossaries
\end{document}
答案1
您可以重新定义\glsprestandardsort
,以便将描述附加到排序值:
\renewcommand{\glsprestandardsort}[3]{%
\glsfieldfetch{#3}{sortvalue}{\tmpA}%
\glsfieldfetch{#3}{desc}{\tmpB}%
\edef#1{\expandonce\tmpA\expandonce\tmpB}%
\glsdosanitizesort
}
以下是完整的 MWE:
\documentclass{book}
\usepackage{amsmath}
\usepackage[nogroupskip,nomain,nonumberlist,xindy]{glossaries-extra}
\newglossary[slg]{symbols}{sym}{sbl}{Nomenclature}
\makeglossaries
\renewcommand{\glsprestandardsort}[3]{%
\glsfieldfetch{#3}{sortvalue}{\tmpA}%
\glsfieldfetch{#3}{desc}{\tmpB}%
\edef#1{\expandonce\tmpA\expandonce\tmpB}%
\glsdosanitizesort
}
\newglossaryentry{xi}{type=symbols,
name={\ensuremath{ \xi }},
description={space variable} }
\newglossaryentry{xii}{type=symbols,
name={\ensuremath{ \xi_i }},
description={discretized space variable} }
\newglossaryentry{f}{type=symbols,
name={\ensuremath{ f }},
description={function of space variable} }
\newglossaryentry{fbis}{type=symbols,
name={\ensuremath{ f }},
description={another function of space variable} }
\newglossaryentry{fi}{type=symbols,
name={\ensuremath{ f_i }},
description={discretized function} }
\begin{document}
A document that contains \gls{f}, \gls{xi}, \gls{fi} and \gls{xii}, but also a second \gls{fbis}.
\printglossaries
\end{document}
这确保了不同的排序值,从而防止 xindy 合并具有重复名称的条目。
请注意,xindy 会从排序值中删除所有控制序列,因此\ensuremath{ \xi }
会变成空格。(如果您\ensuremath{\xi}
这样做,则在没有重新定义 的情况下会出错,\glsprestandardsort
因为排序值将变为 xindy 不允许的空字符串。)在这种情况下,描述已被连接,因此条目的排序值xi
变为空格字符后跟“空间变量”,而xii
条目变为“i 离散空间变量”(再次\xi
删除了 ,但i
下标中的 保留了 )。这就是为什么该xi
术语最终位于列表末尾的原因。如果从每个 的参数中删除所有前导和尾随空格\ensuremath
,则会得到不同的顺序(f_i
最终在 之前f
)。
如果你想考虑从 xindy 切换到bib2gls
,为重复的排序值提供后备行为要容易得多(并且像命令那样\xi
被识别为数学希腊字母而不是被丢弃)。
文件symbols.bib
:
% Encoding: UTF-8
@symbol{xi,
name = {\ensuremath{ \xi }},
description = {space variable}
}
@symbol{xii,
name = {\ensuremath{ \xi_i }},
description = {discretized space variable}
}
@symbol{f,
name = {\ensuremath{ f }},
description = {function of space variable}
}
@symbol{fbis,
name = {\ensuremath{ f }},
description = {another function of space variable}
}
@symbol{fb,
name = {\ensuremath{ f_b }},
description = {another function}
}
@symbol{fi,
name = {\ensuremath{ f_i }},
description = {discretized function}
}
主要文件档案:
\documentclass{book}
\usepackage{amsmath}
\usepackage[nogroupskip,nomain,record]{glossaries-extra}
\newglossary[slg]{symbols}{sym}{sbl}{Nomenclature}
\GlsXtrLoadResources[
src={symbols}, % entries in symbols.bib
symbol-sort-fallback=name,% sort @symbol entries by name field
identical-sort-action=description,% sort by description if sort value identical
type=symbols,% put these entries in the symbols glossary
save-locations=false% location list not needed
]
\begin{document}
A document that contains \gls{f}, \gls{xi}, \gls{fi} and
\gls{xii}, but also a second \gls{fbis}.
\printunsrtglossaries
\end{document}
以下列出拉丁字母后的希腊字母: