我正在使用文学编程(更具体地说是 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}