
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-1
und 4-2
) stellen die turnpage
Umgebung 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 \clearpage
nicht kritisch ist – ich gehe davon aus, \pagebreak
dass 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, \pdfpageattr
bevor die Seite versendet wird.
Nun habe ich mir die Definition der turnpage
Umgebung angesehen ( \ShowCommand{\turnpage}
; \endturnpage
tut 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 sideways
Umgebung 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 source2e
Abschnitt 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 \pdfpageattr
am 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-doc
und 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 turnpage
Umgebung die einzige Seite im Dokument ist. Sie können dies schnell und unkompliziert beheben, indem Sie mit der Verwendung von shipout/before
anstelle von shipout/after
in 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 sideways
Float perfekt platziert ist, so dass \pagebreak
bereits natürlicherweise ein vor ihm aufgetreten ist, und die Seitenachstattdessen sideways
wird gedreht. Ich bin nicht sicher, ob das wirklich passieren kann – das Ausprobieren durch Einfügen von \pagebreak
direkt 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.