
Рассмотрим следующий 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 г.).