如何在列表环境之前断行?

如何在列表环境之前断行?

我正在排版课本练习的答案。我使用名为包装器ntheorem的定理question来处理问题。有些答案以常规文本开头,我希望它们与开头的 XX 号问题在同一行开始。

为了实现这一点,我定义了

\usepackage{ntheorem}
\theoremstyle{plain}
\newtheorem{question}{Question}

lstlisting然而,有些答案只是我用自定义环境排版的一段代码

\usepackage{listings}
\lstnewenvironment{lstcaml}[1][]{\lstset{language=[Objective]caml, frame=single, frameround=tttt, #1}}{}

在环境中question。在这种情况下,我希望列表从下一行开始,以进行代码缩进,并让其周围有一个完整的框架。

它没有像我预期的那样工作:

MWE 结果

来自于

\begin{document}
  \begin{question}
     Some text
     \begin{lstcaml}
        Some code
     \end{lstcaml}
   \end{question}

  \begin{question}

    \begin{lstcaml}
       Some code
    \end{lstcaml}
  \end{question}
  %% the same follows without borders for listings

我试图\par在我的列表环境的定义中添加一个,但无济于事(我不得不作弊,\let\mypar\par因为这些标记似乎是在非定义中使用\long)。

一开始手动输入\ \\是可行的,但是很麻烦,而且我认为它占用了比所需更多的垂直空间。

答案1

在定理标题后面有一个诸如字母 或\strut或 之类的内容就足够了:\leavevmode

\begin{question}\leavevmode
  \begin{lstcaml}
    Some code
  \end{lstcaml}
\end{question}

要对所有实例执行此操作,您可以定义自己的定理样式。在这里,我采用了定理样式,plain\strut在定理标题外添加了一个(\theoremseparator出现在标题内,不能用于此)。总 MWE 变为:

\documentclass{article}
\usepackage{ntheorem}
\makeatletter
\newtheoremstyle{myplain}%
  {\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\theorem@separator]\leavevmode}%
  {\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\ (##3)\theorem@separator]}
\makeatother
\theoremstyle{myplain}
\newtheorem{question}{Question}
\usepackage{listings}
\lstnewenvironment{lstcaml}[1][]{\lstset{language=[Objective]caml, frame=single, frameround=tttt, #1}}{}
\begin{document}
\begin{question}
  Some text
  \begin{lstcaml}
    Some code
  \end{lstcaml}
\end{question}

\begin{question}
  \begin{lstcaml}
    Some code
  \end{lstcaml}
\end{question}
\end{document}

在此处输入图片描述

编辑

正如 ysalmon 所指出的,通过在定义\leavevmode中设置也可以实现相同的效果lstcaml。然后序言变成:

\usepackage{ntheorem}
\theoremstyle{plain}
\newtheorem{question}{Question}
\usepackage{listings}
\lstnewenvironment{lstcaml}[1][]{\leavevmode\lstset{language=[Objective]caml, frame=single, frameround=tttt, #1}}{}

相关内容