当前 Tex Live (2022-08-02): svmono + isodate + \maketitle = 错误

当前 Tex Live (2022-08-02): svmono + isodate + \maketitle = 错误

喂食

\documentclass{svmono}% v5.10 from http://resource-cms.springernature.com/springer-cms/rest/v1/content/20566/data/monographs .
\usepackage[ngerman]{babel}% whether you use babel or not, you get an error.
\usepackage[num,ngerman]{isodate}% USenglish instead of ngerman fails as well.
\begin{document}
\author{Author}
\title{Title}
\maketitle
\end{document}

任何[xe|lua|pdf]latex吐出错误

! Extra \or.
\ifthenelse #1->\toks@ {#1}\TE@repl \or 
                                        \TE@or \TE@repl \and \TE@and \TE@rep...
l.7 \maketitle

在本期中,我使用了当前最新的 TeX Live:

  • pdfTeX,版本 3.141592653-2.6-1.40.24(TeX Live 2022)

  • LaTeX2e <2022-06-01> 补丁级别 5

  • L3编程层 <2022-07-15>

  • svmono 2021/09/08 v5.10

  • 巴贝尔 2022/07/20 3.78

  • isodate 2010/01/03 v2.30

之前 Debian 测试版 (2022) 的 TeX Live 加载了 babel 至少在使用 时不会出现任何问题pdflatex。但是,现在如果你删除 ,就会出现错误\usepackage[ngerman]{babel}。使用的版本如下:

  • pdfTeX,版本 3.141592653-2.6-1.40.24(TeX Live 2022/Debian)

  • LaTeX2e <2021-11-15> 补丁级别 1

  • L3编程层 <2022-06-02>

  • svmono 2021/09/08 v5.10

  • 巴贝尔 2022/05/22 3.75

  • isodate 2010/01/03 v2.30

svmonoSPi的维护者(他们是当前的维护者吗?)和的维护者isonum(电子邮件取自的文档babelbib)已被告知。

谁是罪魁祸首?我们该怎么办?

答案1

svmono

  \if!\@date!\else
    {\large \@date}%          % Date set in \large size.

\@date这是对空(即文档具有)的“乐观”测试\date{}

很难确切列举它何时会失败,但本质上如果\@date被定义为执行任何有趣的操作,它就会失败。这是一种特别激进的扩展形式,因此 etex\protected定义不会有帮助,而 latex \protectrobust 定义只会在某些情况下有所帮助。

isodate定义\@date为使用包\ifthenelse中的测试ifthen,这可能对于简单的顶级测试有用,但极其脆弱,不能在任何类型的代码或扩展上下文中使用。

在以前的版本中,这种组合会产生默认显示的错误,但如果您还添加了\usepackage[ngerman]{babel}一系列意外效果,则可以避免运气而非设计上的错误。

babel 中的一些变化意味着运气耗尽,现在无论有没有 babel 都会出现错误。我没有追踪变化的原因,因为指望其他软件包来维持如此脆弱的测试是不合理的。

svmono 可以使用

\ifx\@date\@empty

也许

\if$\detokenize\expadafter{\@date}$

如下所示,或者他们可以合理地声称,作为出版商类别,他们仅支持 Springer Journals 使用的日期格式,因此支持其他日期格式包超出了范围。

\makatletter
\def\@maketitle{\newpage
 \null
 \vskip 2em                 % Vertical space above title.
\begingroup
  \def\and{\unskip, }
  \parindent=\z@
  \pretolerance=10000
  \rightskip=\z@ \@plus 3cm
  {\LARGE                   % each author set in \LARGE
   \lineskip .5em
   \@author
   \par}%
  \vskip 2cm                % Vertical space after author.
  {\Huge \@title \par}%     % Title set in \Huge size.
  \vskip 1cm                % Vertical space after title.
  \ifx\@subtitle\@empty\else%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   {\LARGE\ignorespaces\@subtitle \par}
   \vskip 1cm                % Vertical space after subtitle.
  \fi
  \ifx\@date\@empty\else %<<<<<<<<<<<<<<<<<<<<<<<<<
    {\large \@date}%          % Date set in \large size.
    \par
    \vskip 1.5em               % Vertical space after date.
  \fi
 \vfill
 {\Large Springer Nature\par}
%\vskip 5\p@
%\large
%  Berlin\enspace Heidelberg\enspace New\kern0.1em York\\
%  Hong\thinspace Kong\enspace London\\
%  Milan\enspace Paris\enspace Tokyo\par
\endgroup}
\makeatother

相关内容