
Considere o seguinte FMWE (Exemplo de Trabalho Bastante Mínimo):
\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}
A saída esperada por mim deste código é
A saída real é
Existe uma maneira correta de alcançar o resultado esperado sem modificar o corpo do documento?
Observe que qualquer uma das duas modificações a seguir no corpo é suficiente para alcançar o resultado desejado:
descomente a linha
% \resetindents
descomente as linhas
% \ExplSyntaxOn
e
% \ExplSyntaxOff
é por isso que essas linhas estão na fonte.
No entanto, apenas \resetindents
parece realmente resolver o problema, pois o exemplo a seguir também fornece a saída real e indesejada.
\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}
Aparentemente, a remoção das linhas em branco da fonte impede que a mudança para expl3
a sintaxe evite o problema. Além disso
\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}
também demonstra o problema.
Portanto, \resetindents
parece ser necessário, mas eupensarque a filosofia das galeras sugere que não deveria ser assim.
Estou curioso para saber como é determinado o padrão dos cortes. Por exemplo,
\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}
não repete o corte até o parágrafo final
enquanto
\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}
repete o corte nos dois parágrafos finais
Em nenhum caso o corte mais recente é repetido, pois isso produziria um corte à direita. O que parece crucial é que o corte repetido abranja mais de um único parágrafo.
\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}
No entanto, pelo menos o efeito não é cumulativo.
\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}
Por favor, note que
Eu sei perfeitamente que isso
l3galley
é experimental e que espera-se que ele quebre se você tentar usá-lo de todas as maneiras estranhas e maravilhosas. Considere esta uma aventura guiada por uma pequena parte das estranhezas e maravilhas que resultam.Também estou ciente de que a estranheza e o espanto estão muito nos olhos de quem vê. É perfeitamente possível que o efeito que considero inesperado seja, na verdade, um recurso de design altamente valorizado pelos desenvolvedores que passaram longas horas sobre um teclado quente tentando desesperadamente fazer com que os recortes se repetissem de acordo com um algoritmo preciso, por mais obscuro que fosse seu padrão. pode ser para mim. TeX é Mistério (de que outra forma descrever a convocação de espíritos tipográficos por estranhas misturas de letras minúsculas e maiúsculas?) e eu ficaria desapontado se esse mistério desaparecesse completamente em seus descendentes.
Responder1
Isso ocorreu devido a um bug no l3galley
. Na demonstração, o recorte \parshape
é configurado no nível superior, então o recorte é 'usado' dentro de um grupo (invisível aqui, mas presente como \kant
se aplica \par
dentro de um grupo). Após o grupo, o \parshape
não foi redefinido, pois l3galley
não foram necessárias tentativas de evitar isso (não há recorte realmente presente e nenhuma outra margem ou o que quer que esteja sendo configurado).
O código agora foi modificado para detectar que o recorte ainda está 'ativo' e requer \parshape
configuração se \par
ocorrer e não estiver no nível superior do grupo. Esta correção aparecerá na próxima expl3
atualização, provavelmente no final desta semana (meados de junho de 2016).