词汇表 - 定义自定义词汇表样式不再起作用/抛出错误:“扫描 \newglossarystyle 的使用时文件结束”

词汇表 - 定义自定义词汇表样式不再起作用/抛出错误:“扫描 \newglossarystyle 的使用时文件结束”

很久以前,我尝试使用glossariesglossaries-extra包定义自己的词汇表样式。在 2021 年初的某个时候,我成功做到了这一点,并能够编写一个可用的词汇表。然后我放弃了这个项目很长一段时间。当我几天前(2022 年 12 月)回来再次工作时,代码不再编译了。

这是 2021 年 1 月的最后一个工作输出: 最后的工作词汇表输出

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}

相关内容