
Я не могу скомпилировать styleguide.tex в biometrika.zip (см.https://academic.oup.com/biomet/pages/General_Instructions).
Вот MWE, который приводит к тому же сообщению об ошибке, хотя я пока не уверен, что я не выплеснул ребенка вместе с водой из ванны.
\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}
Вот вывод 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
решение1
Файл biometrika
класса допускает (как минимум) три серьезные ошибки:
он используется
\rm
повсеместно, несмотря на то, что команда устарела уже 25 лет назад (ну, 14, если верить дате выпуска, но это в любом случае много времени);он переопределяет
\document
, что еще хуже;это так
\def\arabic#1{{\rm\expandafter\@arabic\csname c@#1\endcsname}}
, но это нельзя прокомментировать на публичном сайте.
На самом деле, ошибка номер 3 — это то, чего любой программист LaTeX должен знать, чтобы держаться от нее подальше. Что касается номера 2, цель класса, похоже, просто удалить
\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
(проверено с latex.ltx
помощью TeX Live 2007), так что нет никаких причин делать это.
Как это исправить?
Вот подходящая преамбула, которая превращается \rm
в пустую команду, поэтому все явные вхождения в документе должны быть заменены правильной командой ( \mathrm
в математическом режиме).
%%% 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{}
Затем можно приступить к работе с другими необходимыми пакетами для документа и его основной частью.
Обратите внимание, что автор классазнаето \renewtheoremstyle
!
решение2
Обратите внимание, что
\documentclass{article}
\RequirePackage[thmmarks]{ntheorem}
\newtheorem{definition}{Definition}
\begin{document}
\begin{definition}
This is a definition.
\end{definition}
\end{document}
не вызывает никаких проблем. Кажется, они пытаются использовать ntheorem нестандартным образом.