
考慮以下 FMWE(相當簡單的工作範例):
\documentclass[a4paper]{article}
\usepackage{kantlipsum,xgalley}
\usepackage[scale=.8]{geometry}
\pagestyle{empty}
\ExplSyntaxOn
\NewDocumentCommand\resetindents { }
{
\galley_parshape_set_multi:nnnN { 0 } { 0pt } { 0pt } \c_true_bool
}
\NewDocumentCommand\cutleft { m m }
{
\galley_cutout_left:nn { #1 } { #2 }
}
\NewDocumentCommand\cutright { m m }
{
\galley_cutout_right:nn { #1 } { #2 }
}
\ExplSyntaxOff
\begin{document}
% \ExplSyntaxOn
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
% \resetindents
\kant[6-7]
% \ExplSyntaxOff
\end{document}
這段程式碼的預期輸出是
實際輸出是
有沒有正確的方法可以在不修改文檔正文的情況下實現預期的輸出?
請注意,對主體進行以下兩個修改中的任何一個都足以實現所需的結果:
取消註解該行
% \resetindents
取消註解這些行
% \ExplSyntaxOn
和
% \ExplSyntaxOff
這就是為什麼原始程式碼中存在這些行的原因。
然而,只有\resetindents
真正似乎解決了問題,因為以下範例也給出了實際的、不需要的輸出。
\begin{document}
\ExplSyntaxOn
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
% \resetindents
\kant[6-7]
\ExplSyntaxOff
\end{document}
顯然,從原始程式碼中刪除空白行可以防止切換到expl3
語法來避免該問題。而且
\begin{document}
\ExplSyntaxOn
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]\par
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]\par
% \resetindents
\kant[6-7]\par
\ExplSyntaxOff
\end{document}
也說明了問題。
因此\resetindents
似乎是必要的,但我思考廚房的哲學表明它不應該是這樣。
我很想知道切割模式是如何決定的。例如,
\begin{document}
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5-6]
\kant[7]
\end{document}
直到最後一段才重複剪輯
儘管
\begin{document}
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
\kant[6]
\kant[7]
\end{document}
重複最後兩段的剪輯
在任何情況下都不會重複最近的切割,因為這會在右側產生切割。似乎至關重要的是,重複的剪輯跨越了多個段落。
\begin{document}
\cutright{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.
Perhaps we should make it a bit longer just to see what happens to things in that case.\par
\kant[4]
\cutleft{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
\kant[6]
\kant[7]
\end{document}
然而,至少效果不是累積的。
\begin{document}
\cutright{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.
Perhaps we should make it a bit longer just to see what happens to things in that case.\par
\kant[4]
\cutleft{4}{25mm,25mm,25mm,25mm,25mm,25mm}
This is another extremely short paragraph.
\kant[5]
\kant[6]
\kant[7]
\end{document}
請注意
我非常清楚這
l3galley
是實驗性的,如果你嘗試以各種奇怪而奇妙的方式使用它,它預計會被破壞。將此視為引導冒險,透過一小部分由此產生的怪異和奇蹟。我也知道,奇怪和驚奇是情人眼裡出西施。事實上,我認為意想不到的效果完全有可能是開發人員高度重視的一項設計功能,他們花了很長時間在熱鍵盤上拼命地嘗試讓切口根據精確的演算法重複,無論其模式多麼模糊。可能對我來說。 TeX 是神秘的(否則如何描述透過微小和巨大的奇怪混合來召喚印刷精神?),如果這個神秘在它的後代中完全消失,我會感到失望。
答案1
這是由於l3galley
.在演示中,\parshape
在頂層設置,然後切口在組內“用完”(此處不可見,但在組內\kant
應用時顯示)。\par
分組後,\parshape
沒有重置,因為l3galley
不需要嘗試避免這樣做(實際上不存在切口,也沒有其他邊距或正在設定的任何內容)。
程式碼現已修改為偵測剪切是否仍處於「活動」狀態,並且\parshape
如果\par
發生且不在頂層群組級別,則需要進行設定。此修復程序將出現在下一次expl3
更新中,可能會在本週晚些時候(2016 年 6 月中旬)。