自定义列表环境防止分页(不使用浮动)

自定义列表环境防止分页(不使用浮动)

我正在尝试创建一个不会跨页的自定义列表环境,它有点像中国手指陷阱。

两个主要选项似乎可以避免列表超出页面是:

  1. float作为选项使用。
  2. 将列表放入小页面内。

但是,选项 1 对我来说不起作用,因为这些列表通常在mdframed环境内部使用(用作示例框);当我指定浮点数时,它会出错Not in outer par mode

关于选项 2,列表不兼容,newenvironment因此必须使用lstnewenvironment,但我不知道如何使用后一种定义将小页面包装在列表周围。

下面是一个 MWE,列举了我的各种失败的尝试:

\documentclass{article}
\usepackage{listings}
\usepackage{mdframed}
\usepackage{float}


\lstset{
    columns=fullflexible
}

% Works fine but breaks across pages
\lstnewenvironment{unbreaking}%
{\renewcommand\lstlistingname{Unbreaking}
 \lstset{basicstyle=\ttfamily}}%
{}

% ERROR: Not in outer par mode
%\lstnewenvironment{unbreaking}%
%{\renewcommand\lstlistingname{Unbreaking}
% \lstset{basicstyle=\ttfamily,float,floatplacement=H}}%
%{}

% ERROR: Emergency stop
%\lstnewenvironment{unbreaking}%
%{\begin{minipage}{5cm}
% \renewcommand\lstlistingname{Unbreaking}%
% \lstset{basicstyle=\ttfamily}}%
%{\end{minipage}}

% ERROR: Not in outer par mode
%\newenvironment{unbreaking}%
%{\begin{lstlisting}[basicstyle=\ttfamily,float,floatplacement=H]}%
%{\end{lstlisting}}


\begin{document}

\begin{mdframed}
Hi, I'm an MWE.

\begin{unbreaking}
a b c
\end{unbreaking}
\end{mdframed}

\end{document}

帮助?

答案1

发布问题后,我注意到了以下内容相关问题这恰好涉及将小页面包装在列表环境中的相同情况,其中@clemens 在评论中提供了以下解决方案:

\documentclass{article}
\usepackage{listings}
\usepackage{mdframed}
\usepackage{float}


\lstset{
    columns=fullflexible
}

\lstnewenvironment{unbreaking}%
{\noindent\minipage{\linewidth}\renewcommand\lstlistingname{Unbreaking}
 \lstset{basicstyle=\ttfamily}}%
{\endminipage}

\begin{document}

\begin{mdframed}
Hi, I'm an MWE.

\begin{unbreaking}
a b c
\end{unbreaking}
\end{mdframed}

\end{document}

相关内容