Ist es Geometrie oder pgfpages Fehler?

Oct 28 2020

Mit \usepackage[showframe]{geometry}eingefügt in 2 on 1pgfpages Layout erzeugen Sie ein unerwartetes Ergebnis. Ich habe Latex letzte Woche aktualisiert, bevor dieses Problem nicht aufgetreten ist

\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}

So sah es vor dem Update aus.

Antworten

6 FrankMittelbach Oct 30 2020 at 18:02

Das Problem wurde vorübergehend behoben, indem ein Fix hinzugefügt wurde firstaid(als Teil des LaTeX-Formats). Dies wurde an CTAN gesendet, damit es heute oder morgen die wichtigsten Distributionen erreichen und ab diesem Zeitpunkt wieder wie zuvor funktionieren sollte.

Wie @AndrewStacey feststellte, muss der Kernel eine Schnittstelle bereitstellen, um die Kontrolle am Ende des Aufbaus einer Seite zu übernehmen, bevor diese an die dvi / pdf-Datei gesendet wird, da Anwendungen wie pgfmorepagesdiese weitere Kontrolle darüber hinzufügen möchten, was dabei passiert Bühne (anstatt einfach die Seite auszuliefern).

Dies kann jedoch nicht über einen "Hook" der neuen Hook-Verwaltung erfolgen, da es nicht darum geht, zusätzlichen Code hinzuzufügen (wobei mehrere Pakete Code hinzufügen könnten und die einzige zu lösende Frage in welcher Reihenfolge ist), sondern darum, den Code zu ändern Prozess und nur ein Prozess kann ausgeführt werden.

Das Modell hier muss eines sein, bei dem ein Prozess gegen einen anderen ausgetauscht werden kann, aber immer nur ein Prozess aktiv ist. Mein vorläufiger Begriff dafür ist der eines "Konfigurationspunkts", und wir arbeiten derzeit daran, die Schnittstellen und Konzepte dafür auszubügeln. Sobald dies verfügbar ist, werden wir mit Paketbetreuern zusammenarbeiten, um sie anzuwenden, und dann den aktuellen "firstaid" herausnehmen.

13 AndrewStacey Oct 29 2020 at 03:14

Dies ist keine Antwort, sondern eine Beschreibung des Problems. Ich bin mir sicher, dass dies bald in angemessener Weise angegangen wird.

Die Art pgfpagesund Weise, wie (und seine Erweiterung pgfmorepages- die ich behaupte) funktioniert, besteht darin, LaTeX zu sagen: "Sie erstellen die gesamte Seite genau so, wie Sie möchten. Kurz bevor Sie sie versenden, nehme ich sie und ziehe sie weg spätere Überlegung. ". Dann sagen sie zu einem späteren Zeitpunkt: "Richtig, jetzt möchte ich, dass Sie genau diese Seite versenden."

Aus dieser Beschreibung geht hoffentlich hervor, dass pgf[more]pagesdie Versandroutine im allerletzten Moment unterbrochen werden muss. Die Seite muss vollständig sein, einschließlich Kopf- und Fußzeilen sowie Hintergründen und Rahmen.

Wenn latex.ltxich mich im Code umschaue , kann ich sehen, dass das LaTeX-Team hinter den Kulissen gearbeitet hat, um den LaTeX-Kern zu optimieren. Ein Teil davon besteht darin, an verschiedenen Stellen Hooks zu setzen , damit Pakete geordneter als bisher in verschiedene Routinen eingebunden werden können. Ich vermute, dass der Zweck davon darin besteht, das Durcheinander von Paketen zu beseitigen, die alle versuchen, denselben Befehl, dieselbe Umgebung oder dieselbe Routine neu zu definieren.

In Bezug auf die Auslieferungsroutine fügt der neue LaTeX-Kernel daher zum Zeitpunkt des Versands eine neue Seite hinzu, die Zugriff auf alle diese Hooks bietet. Einer davon, der übrigens durch verwendet wird , um geometryden Rahmen um die Seite zu setzen ( geometrynicht weiß dies - dank der Zauberei des LaTeX - Teams eine Menge von Verpackungen sollten nur Arbeit ohne Änderungen).

Im Moment haben wir also eine Race-Bedingung, dass sowohl LaTeX als pgf[more]pagesauch versuchen, ihren Code in die Versandroutine einzufügen, und beide arbeiten, indem sie \shipoutdurch ihren Code ersetzen . Die Reihenfolge, in der dies geschehen sollte , ist, dass der Code von LaTeX zuerst und dann an pgf[more]pageszweiter Stelle funktioniert . Da LaTeX zuvor geladen wurde pgf[more]pages, wird leider pgf[more]pageszuerst der LaTeX-Code ausgeführt. Dies bedeutet, dass Code wie geometry's showframesnur ausgeführt wird, wenn die Seite tatsächlich ausgeliefert wird und nicht, wenn pgf[more]pagesdie Seite gespeichert wird. Aus diesem Grund sind die Frames falsch.

Was anscheinend benötigt wird, ist ein "Direkt vor dem Versand" -Haken, mit pgf[more]pagesdem Sie in letzter Minute einsteigen können . Das gibt es derzeit nicht, aber aus den Kommentaren des LaTeX-Teams geht hervor, dass sie sich des Problems bewusst sind und es in Kürze beheben werden.