很久以前,我尝试使用glossaries
和glossaries-extra
包定义自己的词汇表样式。在 2021 年初的某个时候,我成功做到了这一点,并能够编写一个可用的词汇表。然后我放弃了这个项目很长一段时间。当我几天前(2022 年 12 月)回来再次工作时,代码不再编译了。
newglossary 样式的原始定义是这样的:我从 2010 年的词汇表和索引指南中获取了它。
\newglossarystyle{physchemunits}{%
% Umgebung: longtable
\renewenvironment{theglossary}%
{\begin{longtable}{@{}clp{7cm}c@{}}}%
{\end{longtable}}%
% Tabellenkopf
\renewcommand*{\glossaryheader}{%
\toprule%
\textbf{Symbol} & \textbf{Name} & \textbf{Description} & \textbf{Unit} \\ %
\midrule%
\endhead}%
% keine Überschriften zwischen Gruppen
\renewcommand*{\glsgroupheading}[1]{}%
% Haupteinträge in einer Zeile:
\renewcommand*{\glossaryentryfield}[4]{%
\glssymbol{##1}% Symbol
& \glstarget{##1}{##2}% Name
& ##3% Description
& \si{\glsunit{##1}}% Einheit
\\% Zeilenende
}%
% Untereinträge wie Haupteinträge
\renewcommand*{\glossarysubentryfield}[6]{%
\glossaryentryfield{##2}{##3}{##4}{##5}{##6}}%
% nichts zwischen Gruppen
\renewcommand*{\glsgroupskip}{}%
}
在对词汇表包的日志进行一些研究之后,我意识到该包的较新版本已经关闭了一些弃用命令的使用,然后我尝试将其替换为推荐的命令。
这仍然不起作用,所以我调查了其他错误来源。在某个时候,我怀疑是 longtable 环境的某个部分导致了错误,所以我试图简化它 - 仍然不起作用。我一直在研究词汇表手册、几本指南,当然还有老旧的互联网,但到目前为止,我还是无法让代码再次工作。最后,我尝试使用词汇表手册第 335 和 336 页中的示例 36 从头开始编写它,但没有成功。
因此,现在我陷入了一个不起作用的最小示例:
%%% === ARARA === %%%
% arara: pdflatex: { synctex: on }
% arara: makeglossaries
%%% arara: makeindex
% arara: pdflatex: { synctex: on }
% arara: pdflatex: { synctex: on }
\documentclass[]{report}
\usepackage[ngerman, english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{siunitx}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{longtable}
% ==============================
% ========== ACRONYMS AND GLOSSARY ==========
\usepackage[xindy, acronym, symbols, shortcuts, toc]{glossaries-extra}
\setabbreviationstyle[acronym]{long-short}
\glsaddstoragekey{glsunit}{a.u.}{\glsunit}
\makeglossaries
\newglossarystyle{physchmunits}{%
% Longtable Umgebung
\renewenvironment{theglossary}%
{\begin{longtable}{cccc}}%
{\end{longtable}}%
% Table Header
\renewcommand*{\glossaryheader}{%
\toprule%
\bfseries Symbol & \bfseries Name & \bfseries Description & \bfseries Unit %
\midrule%
\\\endhead}%
% No heading between groups:
\renewcommand*{\glsgroupheading}[1]{}%
% Haupteinträge:
\renewcommand*{\glossentry}[2]{%
\glossentrysymbol{##1}% Symbol
& \glstarget{##1}{\glossentryname{##1}% Name
& \glossentrydesc{##1}% Description / Beschreibung
& \glsunit{##1}% Unit
& ##2% page list
\tabularnewline % end of row
}%
% Untereinträge
\renewcommand*{\subglossentry}[3]{%
\glossentrysymbol{##2}% Symbol
& \glstarget{##2}{\glossentryname{##2}% Name
& \glossentrydesc{##2}% Description
& \glsunit{##2}% Unit
& ##3% Page list
\tabularnewline % end of row
}%
% Nothing between groups
\renewcommand*{\glsgroupskip}{}%
}
% ========== SYMBOLS ==========
\newglossaryentry{sy:SA}{%
name={specific activity},%
description={specific activity},%
symbol={SA},%
glsunit={sa},%
type={symbols}%
}%
\newglossaryentry{SA}{%
name={specific activity},%
description={specific activity},%
symbol={SA},%
glsunit={sa},%
type={symbols}%
}%
% ========== ACRONYMS ==========
\newacronym{ecsa}{ECSA}{electrochemically active surface area}%
% ==============================
\begin{document}
text
%\ac{ecsa}\\
%\ac{ecsa}\\
\acf{ecsa}\\%
text
\ac{ecsa}\\%
text
\gls{SA}\\%
text
\gls{sy:SA}%
\printglossaries
%\printsymbols
\printsymbols[style=physchemunits,nonumberlist]
\end{document}
如果我尝试运行它,将导致错误代码:
“错误行 1!扫描 \newglossarystyle 的使用时文件结束。\par <> ./testMain2.tex ? ! 紧急停止。\par <> ./testMain2.tex"
现在我不知道如何解决这个错误,甚至不知道在哪里寻找它,所以如果有人可能有解决方案,或者只是有另一个想法要测试或检查什么,我将非常感谢您的意见。
谢谢你!
编辑- 我再次检查,确实发现在两次出现后都缺少两个右括号\glstarget{##1}{\glossentryname{##1}}
现在出现了另一个错误代码:
“!放错位置的 \noalign。\midrule ->\noalign {\ifnum 0=`}\fi @aboverulesep =\aboverulesep \global @... l.25 \begin{theglossary}\glossaryheader”
这至少是我可以调查的新内容 ;-)
编辑2- 事实证明,这个错误是由于术语\\
前面缺少一个词造成的\midrule
。
下一个错误是:
“!额外的对齐标签已更改为 \cr。”
这是因为\glossentry
和\subglossentry
使用的列比我在中定义的列多。
\renewenvironment{theglossary}%
{\begin{longtable}{@{}clp{7cm}cc@{}}}%
{\end{longtable}}%
解决此问题后,MWE 现在可以无错误地进行编译。
%%% === ARARA === %%%
% arara: pdflatex: { synctex: on }
% arara: makeglossaries
%%% arara: makeindex
% arara: pdflatex: { synctex: on }
% arara: pdflatex: { synctex: on }
\documentclass[]{report}
\usepackage[ngerman, english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{siunitx}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{longtable}
% ==============================
% ========== ACRONYMS AND GLOSSARY ==========
\usepackage[xindy, acronym, symbols, shortcuts, toc]{glossaries-extra}
\setabbreviationstyle[acronym]{long-short}
\glsaddstoragekey{glsunit}{a.u.}{\glsunit}
\makeglossaries
\newglossarystyle{physchemunits}{%
% Longtable Umgebung
\renewenvironment{theglossary}%
{\begin{longtable}{@{}clp{7cm}cc@{}}}%
{\end{longtable}}%
% Table Header
\renewcommand*{\glossaryheader}{%
\toprule%
\bfseries Symbol & \bfseries Name & \bfseries Description & \bfseries Unit %
\\\midrule%
\\\endhead}%
% No heading between groups:
\renewcommand*{\glsgroupheading}[1]{}%
% Haupteinträge:
\renewcommand*{\glossentry}[2]{%
\glossentrysymbol{##1}% Symbol
& \glstarget{##1}{\glossentryname{##1}}% Name
& \glossentrydesc{##1}% Description / Beschreibung
& \glsunit{##1}% Unit
& ##2% page list
\tabularnewline % end of row
}%
% Untereinträge
\renewcommand*{\subglossentry}[3]{%
\glossentrysymbol{##2}% Symbol
& \glstarget{##2}{\glossentryname{##2}}% Name
& \glossentrydesc{##2}% Description
& \glsunit{##2}% Unit
& ##3% Page list
\tabularnewline % end of row
}%
% Nothing between groups
\renewcommand*{\glsgroupskip}{}%
}
% ========== SYMBOLS ==========
\newglossaryentry{sy:SA}{%
name={specific activity},%
description={specific activity},%
symbol={SA},%
glsunit={sa},%
type={symbols}%
}%
\newglossaryentry{SA}{%
name={specific activity},%
description={specific activity},%
symbol={SA},%
glsunit={sa},%
type={symbols}%
}%
% ========== ACRONYMS ==========
\newacronym{ecsa}{ECSA}{electrochemically active surface area}%
% ==============================
\begin{document}
iksldklskdlk
%\ac{ecsa}\\
%\ac{ecsa}\\
\acf{ecsa}\\%
sdsdaaasd
\ac{ecsa}\\%
asdasdasd
\gls{SA}\\%
asdasda
\gls{sy:SA}%
\printglossaries
%\printsymbols
\printsymbols[style=physchemunits,nonumberlist]
\end{document}