
En el siguiente revtex4, ¿podríamos hacer que el cambio de página también gire la vista de la página PDF 90 grados hacia la derecha?horizontalOrientación (más que simplemente rotar el contenido 90 grados pero manteniendo la página igual).verticalorientación)?
\documentclass[aps,pre,superscriptaddress]{revtex4-1}
\begin{turnpage}
\begin{figure} or
\begin{table}
[...]
\end{figure} or \end{table}
\end{turnpage}
Otras funciones similares son:
\usepackage{lscape}
\begin{landscape}
\end{landscape}
Respuesta1
Para reformular la pregunta tal como la entendí, ya que parece haber cierta confusión en los comentarios: revtex4
( 4-1
y 4-2
) proporciona el turnpage
entorno, que escribe los contenidos en modo horizontal. Sin embargo. el PDF todavía muestra la página horizontal en orientación vertical. Le gustaría que esta página no solo se escriba en modo horizontal, sino que también se muestre en la misma orientación.*
Logré lograr esto mediante un "código mágico" que obtuve de aquí:Publique tablas orientadas al paisaje con emulateapj en ArXiv. En particular, las líneas de código relevantes son las siguientes:
[...]
\clearpage
\global\pdfpageattr\expandafter{\the\pdfpageattr/Rotate 90}
[...]
Este código da como resultado que las páginas después de estas dos líneas se escriban en modo horizontal, mientras que las páginas anteriores a estas dos líneas se mantienen en modo vertical. no he investigadopor quéEsta macro funciona exactamente (y si lo hago, actualizaré esta respuesta), pero parece suficiente para lograr el objetivo establecido en la pregunta. En particular, tenga en cuenta que \clearpage
no es crítico (espero que \pagebreak
funcione igual de bien), el punto es que podemos configurar la rotación de la página PDF restableciendo la \pdfpageattr
macro antes de que se envíe la página.
Ahora, miré la definición del turnpage
entorno ( \ShowCommand{\turnpage}
; \endturnpage
no hace nada), y tenemos:
\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} }
}
}
donde los espacios en blanco son míos y para mayor claridad. Entonces, tenemos que el sideways
entorno no hace nada demasiado especial, sino que establece un flotador del tamaño de una página y agrega algo de código para rotar el contenido del flotador. (Aquí, a saber, source2e
sec. P1.)
Suponiendo que este flotador siempre será enviado a la página siguiente (y no estoy completamente seguro de qué tan grande es esta suposición, pero funciona para mí en la práctica **), podemos hacer que este flotador se muestre en formato horizontal si Lo configuramos \pdfpageattr
correctamente al comienzo de la página siguiente y luego restablecemos la orientación del PDF al comienzo de la página siguiente.
Lo logré aprovechando los ganchos de envío (a saber, lthooks-doc
y ltshipout-doc
):
\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}%
}%
}%
}
Me sorprende lo robusto que parece ser esto (en el sentido casual, no en el sentido LaTeX); Realmente no se ha roto en absoluto en mi documento. Es importante destacar que lo estoy usando junto con un table*
... el asterisco es fundamental. De lo contrario, incluso sin modificar revtex4
, el posicionamiento del flotador está completamente roto.
Las advertencias habituales: de ninguna manera soy un experto en LaTeX (nunca me he molestado en leer el libro de TeX, si eso sirve de indicación), por lo que mucho de esto proviene de prueba y error. Esperemos que alguien con un conocimiento más profundo de TeX pueda corregir cualquier error en mi razonamiento.
Para mayor claridad, así es como se usaría este código en la práctica:
\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}
Mientras probaba esto, descubrí que se rompe si la página con el turnpage
entorno es la única página del documento. Puede solucionar este problema de manera rápida y sucia experimentando usando shipout/before
en lugar de shipout/after
en el archivo \appdef
. Sin embargo, siempre que haya algún otro contenido, parece funcionar bien.
* Tu pregunta me parece perfectamente clara, la verdad. No estoy seguro de la fuente de la confusión.
** El único caso extremo que se me ocurre es cuando el sideways
flotador está perfectamente colocado de modo que \pagebreak
ya ocurrió naturalmente antes de él, por lo que la páginadespuésen su lugar, se sideways
gira. No estoy seguro de que esto realmente pueda suceder (probarlo insertando un \pagebreak
justo antes del flotador aún produce buenos resultados), pero debería ser fácil modificar el código que proporcioné para tratar ese caso específico, si es que alguna vez sucede. sucede.