El archivo de estilo de revista Biometrika no se lleva bien con TeXLive-2020

El archivo de estilo de revista Biometrika no se lleva bien con TeXLive-2020

No puedo compilar styleguide.tex en biometrika.zip (verhttps://academic.oup.com/biomet/pages/General_Instructions).

Aquí hay un MWE que genera el mismo mensaje de error, aunque todavía no estoy seguro de no haber tirado al bebé con el agua del baño.

\documentclass{article}
\RequirePackage[thmmarks]{ntheorem}

\makeatletter
\def\arabic#1{{\rm\expandafter\@arabic\csname c@#1\endcsname}}
\theoremnumbering{arabic}
\newtheorem{definition}{Definition}
\makeatother

\begin{document}

\begin{definition}
This is a definition.
\end{definition}

\end{document}

Aquí está el resultado de pdflatex:

% pdflatex styleguide
This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./styleguide.tex
LaTeX2e <2020-02-02> patch level 5
L3 programming layer <2020-03-06>
(/usr/local/texlive/2020/texmf-dist/tex/latex/base/article.cls
Document Class: article 2019/12/20 v1.4l Standard LaTeX document class
(/usr/local/texlive/2020/texmf-dist/tex/latex/base/size10.clo)) (./ntheorem.sty

Style `ntheorem', Version 1.24 <2004/09/20>
) (/usr/local/texlive/2020/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def
) (./styleguide.aux)
! Use of \@item doesn't match its definition.
\update@series@target@value #1->\def \reserved@a {
                                                  #1}\ifx \target@meta@famil...
l.13 T
      his is a definition.
? q
OK, entering \batchmode     

Respuesta1

El biometrikaarchivo de clase comete (al menos) tres errores graves:

  1. se usa \rmen todas partes, a pesar de que el comando ha estado obsoleto durante 25 años (bueno, 14 según la fecha de lanzamiento, pero de todos modos es mucho tiempo);

  2. redefine \document, lo cual es aún peor;

  3. hace \def\arabic#1{{\rm\expandafter\@arabic\csname c@#1\endcsname}}lo que no se puede comentar en un sitio público.

Realmente, el error número 3 es algo que cualquier programador de LaTeX debería evitar. En cuanto al número 2, el propósito de la clase parece ser simplemente eliminar

  \ifx\normalsfcodes\@empty
    \ifnum\sfcode`\.=\@m
      \let\normalsfcodes\frenchspacing
    \else
      \let\normalsfcodes\nonfrenchspacing
    \fi
  \fi
  \ifx\document@default@language\m@ne
    \chardef\document@default@language\language
  \fi

(verificado latex.ltxen TeX Live 2007), por lo que no hay motivo alguno para hacerlo.

¿Como arreglarlo?

Aquí hay un preámbulo adecuado que se convierte \rmen una operación no operativa, por lo que todas las apariciones explícitas en el documento deben reemplazarse por el comando correcto ( \mathrmen modo matemático).

%%% fix the plain theorem style to have numbers upright
\RequirePackage[thmmarks]{ntheorem}
\makeatletter
\renewtheoremstyle{plain} 
  {\item[\hskip\labelsep \theorem@headerfont ##1\ \textup{##2}\theorem@separator]} 
  {\item[\hskip\labelsep \theorem@headerfont ##1\ \textup{##2}\ (##3)\theorem@separator]}
\makeatother

%%% save \document and \arabic to be reinstated after loading the class
\let\latexdocument\document
\let\latexarabic\arabic

%%% load the class (use the option you need)
\documentclass[manuscript]{biometrika}
%\documentclass[lineno]{biometrika}

%%% reinstate the original \document and \arabic
\let\document\latexdocument
\let\arabic\latexarabic

%%% make \rm into a no-op
\def\rm{}

Luego se puede continuar con los demás paquetes necesarios para el documento y el cuerpo del documento.

Tenga en cuenta que el autor de la clasesabeacerca de \renewtheoremstyle!

Respuesta2

Tenga en cuenta que

\documentclass{article}
\RequirePackage[thmmarks]{ntheorem}
\newtheorem{definition}{Definition}
\begin{document}
\begin{definition}
This is a definition.
\end{definition}
\end{document}

no plantea ningún problema. Parece que están intentando utilizar el nteorema de una forma no estándar.

información relacionada