É geometria ou bug do pgfpages?

Oct 28 2020

Com o layout pgfpages \usepackage[showframe]{geometry}inserido 2 on 1produz um resultado inesperado. Eu atualizei látex na semana passada, antes que esse problema não aparecesse

\documentclass{article}
\usepackage{lipsum}
\usepackage[showframe]{geometry}
\usepackage{pgfpages}

\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm,landscape]

\begin{document}

\lipsum[1-5]
 
\newpage

\lipsum[1-5]

\end{document}

Era assim que parecia antes da atualização.

Respostas

6 FrankMittelbach Oct 30 2020 at 18:02

O problema foi temporariamente resolvido com a adição de uma correção firstaid(como parte do formato LaTeX). Isso foi enviado ao CTAN, portanto, deve chegar às principais distribuições hoje ou amanhã e, a partir desse ponto, deve funcionar novamente como antes.

Como @AndrewStacey observou, o kernel precisa fornecer uma interface para assumir o controle no final da construção de uma página, antes de enviá-la para o arquivo dvi / pdf, já que os aplicativos pgfmorepagesdesejam adicionar mais controle sobre o que acontece neste estágio (em vez de simplesmente enviar a página para fora).

No entanto, isso não pode ser feito por meio de um "gancho" do novo gerenciamento de gancho, pois não se trata de adicionar código adicional (onde vários pacotes podem adicionar código e a única questão a resolver é em que ordem), mas é sobre como alterar o processo e apenas um processo pode ser executado.

O modelo aqui deve ser aquele em que um processo pode ser trocado por outro, mas apenas um processo está sempre ativo. Meu termo provisório para isso é "ponto de configuração" e atualmente estamos trabalhando para definir as interfaces e os conceitos para isso. Assim que estiver disponível, trabalharemos com os mantenedores do pacote como aplicá-los e, em seguida, removeremos os "primeiros socorros" atuais.

13 AndrewStacey Oct 29 2020 at 03:14

Isso não é uma resposta, é uma descrição do problema. Estou certo de que isso será tratado em breve de maneira adequada.

A forma como isso pgfpages(e sua extensão, pgfmorepages- que mantenho) funciona é dizendo ao LaTeX, "Você constrói a página inteira exatamente como deseja, então, antes de enviá-la, vou pegá-la e guardá-la por consideração posterior. ". Posteriormente, eles dizem "Certo, agora quero que envie exatamente esta página".

A partir dessa descrição, fica claro que pgf[more]pagesprecisa interromper a rotina de embarque no último momento. A página deve ser completa, incluindo cabeçalhos e rodapés, planos de fundo e bordas.

Ao vasculhar o latex.ltxcódigo, posso ver que a equipe do LaTeX tem trabalhado nos bastidores para otimizar o núcleo do LaTeX. Parte disso envolve colocar ganchos em vários pontos para permitir que os pacotes se conectem a várias rotinas de uma maneira mais ordenada do que era possível anteriormente. Acho que o objetivo disso é resolver a bagunça que consiste em pacotes conflitantes que tentam redefinir o mesmo comando, ambiente ou rotina.

Com relação à rotina de envio, portanto, o novo kernel LaTeX adiciona seu próprio código no momento do envio de uma nova página que fornece acesso a todos esses ganchos. Um dos quais, aliás, é usado geometrypara colocar o quadro ao redor da página ( geometrynão sei disso - graças à magia da equipe do LaTeX uma grande quantidade de pacotes deve funcionar sem modificação).

Portanto, no momento, temos uma condição de corrida em que tanto LaTeX quanto pgf[more]pagesestão tentando inserir seu código na rotina de envio e ambos trabalham substituindo \shipoutpor seu código. A ordem que deve acontecer é que o código do LaTeX funcione primeiro e depois em pgf[more]pagessegundo. Infelizmente, como o LaTeX é carregado antes pgf[more]pages, na verdade o que acontece é que pgf[more]pagesé executado primeiro e depois o código do LaTeX. Isso significa que o código como geometry's showframessó é executado quando a página é realmente enviada e não quando a pgf[more]pagesarmazena. É por isso que os quadros estão incorretos.

O que parece ser necessário é um gancho "Imediatamente antes do embarque" que permita o lançamento pgf[more]pagesno último minuto. Isso não existe atualmente, no entanto, a partir dos comentários da equipe do LaTeX, parece que eles estão cientes do problema e o abordarão em breve.