使用 noweb 时,段落在代码块后不会分页

使用 noweb 时,段落在代码块后不会分页

我正在使用文学编程(更具体地说是 noweb)编写技术报告。但似乎有些东西会阻止段落在页面末尾直接在代码段后断开,这导致某些页面末尾出现大量空白。

MWE.nw

\documentclass{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{noweb}
\usepackage{lipsum}

\begin{document}

<<first code chunk>>=
My Code
@ %

%\lipsum[1-5] % This works
\lipsum[1-6] % This doesn't

\end{document}

当使用以下方式将其编译为 tex 文件时

noweave-delay MWE.nw > MWE.tex

我得到以下文件

移动终端

\documentclass{scrartcl}% ===> this file was generated automatically by noweave --- better not edit it

\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{noweb}
\usepackage{lipsum}

\begin{document}

\nwfilename{MWE.nw}\nwbegincode{1}\moddef{first code chunk}\endmoddef\nwstartdeflinemarkup\nwenddeflinemarkup
My Code
\nwendcode{}\nwbegindocs{2}%

%\lipsum[1-5] % This works
\lipsum[1-6] % This doesn't

\end{document}
\nwenddocs{}

如果内容完全适合第一页,它就会在那里排序,否则它会从新的一页开始。

有人知道这是什么原因造成的吗?任何帮助都将不胜感激。:-)

答案1

我终于找到了一些东西。我想分享对我有用的解决方案。

noweb.sty命令的末尾\nwendcode定义了一个,这导致了问题。\filbreak

\def\nwendcode{\endtrivlist \endgroup \filbreak}

因此,第一个解决方案就是重新定义命令并删除\filbreak

\def\nwendcode{\endtrivlist \endgroup}

但是现在没有什么可以阻止代码段一直分裂在两个页面上。所以我\nwbegincode也重新定义了一个 samepage 环境。

\let\oldnwbc\nwbegincode
\def\nwbegincode{\begin{samepage}\oldnwbc}
\def\nwendcode{\endtrivlist \endgroup\end{samepage}}

我认为这有一定的效果,但不幸的是代码块的名称仍然与代码本身分离,这导致名称和代码之间有很多分页符。最后我找到了一个简洁的小包needspace,它允许我为以下几行保留一些空间。有了这个,分页终于按预期工作了。

\usepackage{needspace}

\let\oldnwbc\nwbegincode
\def\nwbegincode{\needspace{5\baselineskip}\oldnwbc}
\def\nwendcode{\endtrivlist \endgroup}

相关内容