如何使 latex 编译器对 '\item' 缺少枚举或逐项列举环境更加严格?

如何使 latex 编译器对 '\item' 缺少枚举或逐项列举环境更加严格?

\item 位于定理类型环境中但不位于枚举或逐项环境中时,LaTeX 不会给出错误。有没有办法使编译更严格,以便在发生这种情况时收到错误?

这是一个最小的工作示例:

\documentclass{amsart}

\usepackage{enumitem}

\theoremstyle{plain} 

\newtheorem{lemma}{Lemma}

\begin{document}

\begin{lemma}
  Hello
  
  \item abcd 
  \item This compiles without error.
\end{lemma}

\end{document}

如果它很重要的话,这是我正在使用的 TeX 版本:

This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex

restricted \write18 enabled.

entering extended mode

Processing: test.tex
LaTeX2e <2022-11-01> patch level 1

L3 programming layer <2023-02-22>

答案1

如果你足够努力,你大概可以做到这一点:

\documentclass{amsart}

\usepackage{enumitem}

\theoremstyle{plain} 

\newtheorem{lemma}{Lemma}

\begin{document}

\ExplSyntaxOn
\makeatletter
\AddToHook{cmd/item/before}{
  \str_if_eq:VnT \@currenvir {lemma} {\errmessage{oh~no}}
}
\makeatother
\ExplSyntaxOff

\begin{lemma}
  Hello
  
  \item abcd 
  \item This compiles with error.
\end{lemma}

\end{document}

只是一个概念证明,文档在texdoc lthooks

如果您想检查多个环境等,您可能需要使用\str_case或其他东西(例如,使用 TeX 的哈希表进行“恒定”时间检查),但编译白名单(或黑名单)对我来说似乎是不可避免的。

相关内容