我如何在 的环境中强制在 到 s 之间或甚至在单个 的两行之间进行分页ledpar
?{pages}
我\stanza
提出\stanza
这个问题的原因是,ledpar
有时会在一节经文和下一行的延续之间分页,例如
这是一首太长的诗句
—ledpar
在此处插入分页符 —
(缩进)单行
这样读起来不太好,我想在“这是...”之前强制分页。
在“的评论中ledmac/-par:没有 versesyncing 但有 pagesyncing“diabonas 建议手动停止left
-/ rightpage
/ \Pages
-construc 以强制分页,但我希望有更优雅的方式……?
这是一个用于测试的最小示例。我尝试了三个版本;相关代码标有 [n]。
\documentclass{scrartcl}
\usepackage{geometry}% very small pages to see an effect
\geometry{paperheight=4cm,paperwidth=6cm,vmargin=1cm}
\usepackage{ledmac,ledpar}
\begin{document}
\begin{pages}
\begin{Leftside}
\beginnumbering
\setstanzaindents{2,0,0,0}
\stanza 1 & 2 & 3 \&
\stanza 4 & 5 & 6 \&
% \stanza\pagebreak\&% [1] doesn't work
% \pagebreak% [2,3] doesn't work too
\stanza 7 & 8 & 9 \&
\endnumbering
\end{Leftside}
\begin{Rightside}
\beginnumbering
\setstanzaindents{2,0,0,0}
\stanza one & two & three \&
\stanza four & five & six \&
% \stanza\pagebreak\&% [1] doesn't work
% \pagebreak% [3] doesn't work too
\stanza seven & eight & nine \&
\endnumbering
\end{Rightside}
\Pages
\end{pages}
\end{document}
答案1
从漂亮的编码角度来说,这个解决方案当然不是“更优雅的方法” - 事实上它恰恰相反! - 但它似乎有效:
代码:
\usepackage{etoolbox}
\makeatletter
\newcommand*{\pageisfull}{\def\checkpageL{\l@dpagefulltrue\l@dsamepagefalse}}
\newcommand*{\fakelineL}{{\ledRcolfalse\new@line\startlock\skipnumbering\endlock\null}}
\newcommand*{\fakelineR}{{\ledRcoltrue\new@lineR\startlock\skipnumbering\endlock\null}}
\patchcmd{\Pages}{\hb@xt@ \hsize{\ledstrutL\unhbox\l@dleftbox}}{\ifdim\dp\l@dleftbox=12mm\pageisfull\fakelineL\else\hb@xt@ \hsize{\ledstrutL\unhbox\l@dleftbox}\fi}{}{}
\patchcmd{\Pages}{\hb@xt@ \hsize{\ledstrutR\unhbox\l@drightbox}}{\ifdim\dp\l@drightbox=12mm\fakelineR\else\hb@xt@ \hsize{\ledstrutR\unhbox\l@drightbox}\fi}{}{}
\makeatother
\newcommand*{\ledparpagebreak}{\stanza\strut\vrule depth12mm\&}
解释:
修改了中央输出例程,\Pages
以检查要插入的框是否具有 的深度。这对于普通框来说不太现实,因此它将在此时作为分页符的标记。如果发现这样的特殊框,则不会输出 - 而是执行12mm
新定义的宏\fakelineL
/\fakelineR
和:\pageisfull
\fakeline.
如果确实有一行需要插入,这些命令就会执行,但它们会执行必要的宏来跳过此行的行号。这可能听起来很奇怪,但事实证明这是必要的,(希望)可以获得正确的行号。
宏\pageisfull
hack\checkboxL
控制是否需要分页符,以便强制打开新页面。(此重新定义是本地的,因为它位于 中的一个组内\Pages
,因此我们不必重置更改,因为这会在组末尾自动完成。)
现在我们只需要定义一个宏\ledparpagebreak
,插入这样一个深度框12mm
以便能够控制分页:它开始一个新的节(否则,输出例程无法正确处理它)并设置\vrule
所需的深度。
用法:
只需在加载后将代码添加到 LaTeX 文档中ledpar
即可。然后,您可以\ledparpagebreak
在两个节之间使用以在此处插入分页符。确保使用中的命令两个都列(在相应的节之后,否则您可能会观察到奇怪的行为......)。
您可以将此 hack 与答案中建议的补丁一起使用你的相关问题因为两者应该兼容。
警告:
正如我所说,这不是一个干净的方法根本,我无法保证在所有情况下都能正确行事,尤其是关于一致的行号(但它在我的测试文本中运行正常)。
更好的办法可能是利用所谓的“操作代码列表” ledmac
:在我看来,它是专门为在某些行执行特殊任务而制作的,例如开始新页面。但是,我对ledmac
/的内部结构了解ledpar
不够,无法使用它。