revtex und turnpage: Drehen Sie die PDF-Seitenansicht ebenfalls um 90 Grad in die horizontale Ausrichtung

revtex und turnpage: Drehen Sie die PDF-Seitenansicht ebenfalls um 90 Grad in die horizontale Ausrichtung

Könnten wir im folgenden revtex4 die Seite so drehen, dass die PDF-Seitenansicht ebenfalls um 90 Grad gedreht wird, umhorizontalAusrichtung (mehr als nur den Inhalt um 90 Grad zu drehen, aber die Seite gleich zu lassenVertikaleOrientierung)?

\documentclass[aps,pre,superscriptaddress]{revtex4-1}

\begin{turnpage}

\begin{figure} or 
\begin{table}

[...]

\end{figure} or \end{table}

\end{turnpage}

Andere ähnliche Funktionen sind:

\usepackage{lscape} 

\begin{landscape} 

\end{landscape} 

Antwort1

Um die Frage so zu formulieren, wie ich sie verstanden habe, da in den Kommentaren eine gewisse Verwirrung zu herrschen scheint: revtex4( 4-1und 4-2) stellen die turnpageUmgebung bereit, die den Inhalt im Querformat setzt. Allerdings zeigt das PDF die Querformatseite immer noch im Hochformat an. Sie möchten, dass diese Seite nicht nur im Querformat gesetzt, sondern auch in derselben Ausrichtung angezeigt wird.*

Dies ist mir mithilfe eines „Zaubercodes“ gelungen, den ich hier habe:Veröffentlichen Sie querformatige Tabellen mit emulateapj auf ArXivIm Einzelnen handelt es sich dabei um die folgenden Codezeilen:

[...]
\clearpage
\global\pdfpageattr\expandafter{\the\pdfpageattr/Rotate 90}
[...]

Dieser Code bewirkt, dass die Seiten nach diesen beiden Zeilen im Querformat gesetzt werden, während die Seiten vor diesen beiden Zeilen im Hochformat bleiben. Ich habe mir das nicht angesehenWarumDieses Makro funktioniert genau (und wenn das der Fall ist, werde ich diese Antwort aktualisieren), aber das scheint auszureichen, um das in der Frage genannte Ziel zu erreichen. Beachten Sie insbesondere, dass dies \clearpagenicht kritisch ist – ich gehe davon aus, \pagebreakdass es genauso gut funktioniert – der Punkt ist, dass wir die Drehung für die PDF-Seite festlegen können, indem wir das Makro zurücksetzen, \pdfpageattrbevor die Seite versendet wird.

Nun habe ich mir die Definition der turnpageUmgebung angesehen ( \ShowCommand{\turnpage}; \endturnpagetut nichts) und wir haben:

\turnpage =
  \def \width@float  {\textheight}
  \def \widthd@float {\textheight}
  \appdef \@endfloatbox
  {
    \@ifxundefined \@currbox
      {\ltxgrid@warn {Cannot rotate! Not a float}}
    {
      \setbox \@currbox \vbox to\textwidth
      {\vfil \unvbox \@currbox \vfil}
      \global\setbox \@currbox \vbox
      { \rotatebox{90}{\box \@currbox} }
    }
  }

wobei Leerzeichen von mir stammen und der Übersichtlichkeit dienen. Wir haben also, dass die sidewaysUmgebung nichts allzu Besonderes tut, sondern einen Float auf die Größe einer Seite einstellt und etwas Code hinzufügt, um den Inhalt des Floats zu drehen. (Hier, nämlich source2eAbschnitt P1.)

Unter der Annahme, dass dieser Float immer auf die nächste Seite geschoben wird (und ich bin nicht ganz sicher, wie groß diese Annahme ist, aber in der Praxis funktioniert es für mich**), können wir diesen Float daher im Querformat anzeigen, wenn wir ihn \pdfpageattram Anfang der nächsten Seite richtig einstellen und dann die PDF-Ausrichtung am Anfang der folgenden Seite zurücksetzen.

Dies habe ich durch die Nutzung der Shipout-Hooks (nämlich lthooks-docund ltshipout-doc) erreicht:

\appdef \turnpage {%
  % When we're declaring our turnpage float, instruct LaTeX to run
  % the following code after the current page has been finalized.
  \AddToHookNext{shipout/after}{%
    % Set the following page to be rotated by 90 degrees.
    \global\pdfpageattr\expandafter{\the\pdfpageattr/Rotate 90}%
    % Also, once this page is finalized (recalling that this is already
    % being called for the float's page), set the PDF attributes such that
    % the next pages are upright again.
    \AddToHookNext{shipout/after}{%
      \global\pdfpageattr\expandafter{\the\pdfpageattr/Rotate 0}%
    }%
  }%
}

Ich bin überrascht, wie robust (im allgemeinen Sinne, nicht im LaTeX-Sinne) das zu sein scheint; es ist in meinem Dokument wirklich überhaupt nicht kaputt gegangen. Wichtig ist, dass ich es zusammen mit einem verwende – das Sternchen ist grundlegend. Andernfalls ist die Positionierung des Floats table*selbst mit einem unveränderten vollständig kaputt.revtex4

Die üblichen Vorbehalte: Ich bin keineswegs ein LaTeX-Experte (ich habe mir nie die Mühe gemacht, das TeX-Buch zu lesen, falls das ein Hinweis ist), daher beruht vieles hier auf Versuch und Irrtum. Hoffentlich kann jemand mit einem tieferen Verständnis von TeX etwaige Fehler in meiner Argumentation korrigieren.

Zur Verdeutlichung ist hier die praktische Verwendung dieses Codes aufgeführt:

\documentclass{revtex4-2}
\usepackage{graphicx} % Necessary to use turnpage!

\appdef \turnpage {%
  % When we're declaring our turnpage float, instruct LaTeX to run
  % the following code after the current page has been finalized.
  \AddToHookNext{shipout/after}{%
    % Set the following page to be rotated by 90 degrees.
    \global\pdfpageattr\expandafter{\the\pdfpageattr/Rotate 90}%
    % Also, once this page is finalized (recalling that this is already
    % being called for the float's page), set the PDF attributes such that
    % the next pages are upright again.
    \AddToHookNext{shipout/after}{%
      \global\pdfpageattr\expandafter{\the\pdfpageattr/Rotate 0}%
    }%
  }%
}

\begin{document}

Start of the document...

\begin{turnpage}
\begin{table*}
  \caption{Caption of this table.}
  The contents of the table would go here.
\end{table*}
\end{turnpage}

...rest of the document

\end{document}

Beim Testen habe ich festgestellt, dass es nicht funktioniert, wenn die Seite mit der turnpageUmgebung die einzige Seite im Dokument ist. Sie können dies schnell und unkompliziert beheben, indem Sie mit der Verwendung von shipout/beforeanstelle von shipout/afterin experimentieren \appdef. Solange jedoch anderer Inhalt vorhanden ist, scheint es problemlos zu funktionieren.

* Ehrlich gesagt, ist mir Ihre Frage völlig klar. Ich bin mir nicht sicher, was die Ursache für die Verwirrung ist.

** Der einzige Grenzfall, der mir einfällt, ist, wenn der sidewaysFloat perfekt platziert ist, so dass \pagebreakbereits natürlicherweise ein vor ihm aufgetreten ist, und die Seitenachstattdessen sidewayswird gedreht. Ich bin nicht sicher, ob das wirklich passieren kann – das Ausprobieren durch Einfügen von \pagebreakdirekt vor dem Float liefert immer noch gute Ergebnisse – aber es sollte einfach sein, den von mir bereitgestellten Code zu ändern, um diesen speziellen Fall zu behandeln, falls er jemals eintritt.

verwandte Informationen