首先,我知道这个问题在这个问题,但他们的解决方案在特定情况下对我来说不起作用,所以我正在寻找更好的解决方案。
最小工作示例 #1 如下所示。这里的想法是将枚举环境重新定义为名为 的新环境procedure
。这个新环境的目的是将一些附加文本附加到环境中每个项目的末尾。这种方法效果很好,但是,如果该特定项目靠近页面边界,附加的文本通常会被发送到另一个页面。
上面链接的问题提供的解决方案是将项目放入迷你页面。这是在 MWE #2 中完成的。这可以很好地将特定项目放在一起,但这些项目会溢出页面!在特定项目前插入或\clearpage
不会\newpage
产生任何效果。我猜是因为 latex 不知道迷你页面项目的大小,因此无法正确预算它们的空间。
有人能在这里提供解决方案吗?我只是希望能够将整个项目放在程序环境中,如果当前页面末尾无法容纳所有项目,则自动将整个项目推送到下一页。
最大能量损失 #1
代码
\documentclass{article}
\usepackage{lipsum}
\def\initial{\par \vspace{2ex} Initial: \underline{\hspace{10em}}}
\let\olditem\item
\let\saveenumerate\enumerate
\let\saveendenumerate\endenumerate
\newenvironment{procedure}{%
\def\newitem{\initial\olditem}
\saveenumerate
\def\step{%
\let\step\newitem\olditem
}
}{%
\initial\saveendenumerate%
}
\begin{document}
\begin{procedure}
\step \lipsum[1]
\step \lipsum[2]
\step \lipsum[3]
\step \lipsum[4]
\step \lipsum[5]
\end{procedure}
\end{document}
输出
第 4 项上自动附加的文本在下一页!我想将其与第 4 项放在一起,即使这意味着将第 4 项完全推到下一页。
最大能量损失 #2
代码
\documentclass{article}
\usepackage{lipsum}
\def\initial{\par \vspace{2ex} Initial: \underline{\hspace{10em}}}
\let\olditem\item
\let\saveenumerate\enumerate
\let\saveendenumerate\endenumerate
\newenvironment{procedure}{%
\def\newitem{\initial\olditem}
\saveenumerate
\let\closepage\relax
\def\step{%
\closepage
\let\step\newitem\olditem
\minipage[t]{\linewidth}
\let\closepage\endminipage
}
}{%
\initial\closepage\saveendenumerate%
}
\begin{document}
\begin{procedure}
\step \lipsum[1]
\step \lipsum[2]
\step \lipsum[3]
\step \lipsum[4]
\step \lipsum[5]
\step \lipsum[6]
\end{procedure}
\end{document}
输出
现在项目保持在一起,但项目 #6 溢出了页面边缘!这对我来说也不起作用。
答案1
您需要将首字母的最终代码放在 内minipage
;而您当前的代码则将其放在 外。您可以直接修改代码来执行此操作,如下所示(这样做的好处是您可以只使用标准命令\item
):
\documentclass{article}
\usepackage{lipsum}
\newcommand{\initial}{\par \vspace{2ex} Initial: \underline{\hspace{10em}}\par}
\let\saveenumerate\enumerate
\let\saveendenumerate\endenumerate
\newenvironment{procedure}{%
\saveenumerate
\newcommand{\closestep}{}%
\newcommand{\step}{%
\closestep
\item
\minipage[t]{\linewidth}%
\renewcommand{\closestep}{\initial\endminipage}%
}%
}{%
\closestep\saveendenumerate%
}
\begin{document}
\begin{procedure}
\step \lipsum[1]
\step \lipsum[2]
\step \lipsum[3]
\step \lipsum[4]
\step \lipsum[5]
\step \lipsum[6]
\end{procedure}
\end{document}
这样会生成两页,其中第 4 项从第二页开始,不会跨页。
使用该包可以使保存标准定义的舞蹈enumerate
变得更加自然environ
,该包允许您定义一个新环境,将其\BODY
放入某些给定的命令序列中:
\documentclass{article}
\usepackage{environ}
\usepackage{lipsum}
\newcommand{\initial}{\par \vspace{2ex} Initial: \underline{\hspace{10em}}\par}
\NewEnviron{procedure}{\newcommand{\closestep}{}
\newcommand{\step}{\closestep
\item
\minipage[t]{\linewidth}%
\renewcommand{\closestep}{\initial\endminipage}%
}%
\begin{enumerate}%
\BODY
\closestep
\end{enumerate}%
}
\begin{document}
\begin{procedure}
\step \lipsum[1]
\step \lipsum[2]
\step \lipsum[3]
\step \lipsum[4]
\step \lipsum[5]
\step \lipsum[6]
\end{procedure}
\end{document}
请注意,我尽可能使用 LaTeX 的\newcommand
/ 。\renewcommand