Есть ли правильный способ предотвратить повторение вырезки из гранок в дальнейшем, не изменяя текст документа?

Есть ли правильный способ предотвратить повторение вырезки из гранок в дальнейшем, не изменяя текст документа?

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

Ожидаемый мной вывод этого кода:

ожидал

Фактический выходной сигнал:

действительный

Существует ли правильный способ добиться ожидаемого результата, не изменяя текст документа?

Обратите внимание, что для достижения желаемого результата достаточно внести в тело одну из следующих двух модификаций:

  1. раскомментируйте строку

    % \resetindents
    
  2. раскомментируйте строки

    % \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 г.).

Связанный контент