当\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 的哈希表进行“恒定”时间检查),但编译白名单(或黑名单)对我来说似乎是不可避免的。