类似于列表项的定理环境

类似于列表项的定理环境

我开始与同事合作,他们有练习表,实际上是一长串练习。这里有 2 个练习(注意第二个练习有一个标题)。

排版目标

我觉得它很丑,但我可以忍受。

然而,事实证明,他们的 LaTeX 代码确实包含一个非常大的enumerate,其中每个练习都是一个\item

\begin{enumerate}
\item Beginning of first exercise.

Very long text......

\item Oh, the second exercise.

\suspend{enumerate}

Some text which is not an exercise.

\resume{enumerate}
\item An exercise.

\end{enumerate}

这太脏了。我没法处理。为了让代码清晰易读,我需要每个练习都处于一个环境中。

\begin{exercise}
 Beginning of first exercise.
    
    Very long text......
\end{exercise}

\begin{exercise}
Second exercise.
\end{exercise}

目前,我正在使用以下内容:

\usepackage{amsthm, thmtools}
\def\aLaLigne{\newline\leavevmode\null}
\let\finLigne\relax
\declaretheoremstyle[
notebraces={}{\global\let\finLigne\aLaLigne}, % hack because we want a line break iff there is a title to the exercise
notefont=\normalfont\sffamily,
headfont=\normalfont\bfseries,
bodyfont=\normalfont,
headpunct={.\finLigne\global\let\finLigne\relax},
headformat=margin,
headindent=3em
]{styleQuestion}
\declaretheorem[style=styleQuestion, title={}]{question}

\usepackage{enumitem}
\newlist{ssquest}{enumerate}{1}
\setlist[ssquest]{label=(\alph*)}

这几乎是正确的。

现在的情况

我仍然需要将练习内容排版为增加左边距,这样它就不会位于练习编号的左侧。此外,尽管使用了\leavevmodeas peramsthm的文档,当内容以枚举开头时,我还没有设法有效地在开头换行。

答案1

感谢大家的各种评论。建议ntheorem无法直接应用,因为我无法使用它来更改标题的字体。

然而,探索它的来源,看看它是如何做到的,让我这个答案,我已能够进行如下调整。

\usepackage{amsthm, thmtools, etoolbox}


\makeatletter
\patchcmd\@thm
  {\trivlist}
  {\list{}{\leftmargin3.25em\itemindent-15em}}
  {}{}
\newcommand{\xdeclaretheorem}[2][]{%
  \declaretheorem[#1]{#2}%
  \expandafter\patchcmd\csname thmt@original@end#2\endcsname
    {\endtrivlist}{\endlist}{}{}%
}


\def\aLaLigne{\leavevmode\par}
\let\finLigne\relax
\declaretheoremstyle[
notebraces={}{\global\let\finLigne\aLaLigne},
notefont=\normalfont\sffamily,
headfont=\normalfont\bfseries,
bodyfont=\normalfont,
headpunct={},
headformat={\hskip-.4em\makebox[0pt][r]{\NUMBER.}\NOTE},
postheadhook={\finLigne\global\let\finLigne\relax},
]{styleQuestion}
\xdeclaretheorem[style=styleQuestion, title={\hskip-.9ex.}]{question}

\usepackage{enumitem}
\newlist{ssquest}{enumerate}{1}
\setlist[ssquest]{label=(\alph*)}

同事们很高兴;这在他们的计算机上编译,并且 PDF 看起来和他们习惯的一样丑陋。

我将逐步颠覆所有代码以使用这些新环境,有一天我们将切换到更漂亮的演示。

相关内容