
No revtex4 a seguir, poderíamos fazer a virada para também girar a visualização da página PDF em 90 graus para ohorizontalorientação (mais do que apenas girar o conteúdo em 90 graus, mas manter a página igualverticalorientação)?
\documentclass[aps,pre,superscriptaddress]{revtex4-1}
\begin{turnpage}
\begin{figure} or
\begin{table}
[...]
\end{figure} or \end{table}
\end{turnpage}
Outras funções semelhantes são:
\usepackage{lscape}
\begin{landscape}
\end{landscape}
Responder1
Para reafirmar a questão como a entendi, pois parece haver alguma confusão nos comentários: revtex4
( 4-1
e 4-2
) fornecer o turnpage
ambiente, que compõe o conteúdo em modo paisagem. No entanto. o PDF ainda mostra a página paisagem na orientação retrato. Você gostaria que esta página não fosse apenas composta no modo paisagem, mas também mostrada na mesma orientação.*
Consegui isso por meio de algum "código mágico" que obtive daqui:Publique tabelas orientadas a paisagem com emulateapj no ArXiv. Em particular, as linhas de código relevantes são as seguintes:
[...]
\clearpage
\global\pdfpageattr\expandafter{\the\pdfpageattr/Rotate 90}
[...]
Esse código faz com que as páginas após essas duas linhas sejam compostas no modo paisagem, enquanto as páginas anteriores a essas duas linhas são mantidas no modo retrato. Eu não olheipor queesta macro funciona exatamente (e se funcionar, atualizarei esta resposta), mas parece suficiente para atingir o objetivo declarado na pergunta. Em particular, observe que isso \clearpage
não é crítico - espero que \pagebreak
funcione tão bem - a questão é que podemos definir a rotação da página PDF redefinindo a \pdfpageattr
macro antes que a página seja enviada.
Agora, olhei a definição do turnpage
ambiente ( \ShowCommand{\turnpage}
; \endturnpage
não faz nada) e temos:
\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} }
}
}
onde o espaço em branco é meu e para maior clareza. Então, temos que o sideways
ambiente não está fazendo nada muito especial, mas sim configurando um float do tamanho de uma página e adicionando algum código para girar o conteúdo do float. (Aqui, viz. source2e
seção P1.)
Supondo que esse float sempre será empurrado para a próxima página (e não tenho certeza do quão grande é essa suposição, mas está funcionando para mim na prática **), podemos, portanto, fazer com que esse float seja exibido em paisagem se definimos \pdfpageattr
corretamente no início da próxima página e, em seguida, redefinimos a orientação do PDF no início da página seguinte.
Consegui isso aproveitando os ganchos de envio (ou seja, lthooks-doc
e 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}%
}%
}%
}
Estou surpreso com o quão robusto (no sentido casual, não no sentido do LaTeX) isso parece ser; realmente não quebrou em meu documento. É importante ressaltar que estou usando isso junto com um table*
- o asterisco é fundamental. Caso contrário, mesmo com um revtex4
, o posicionamento do float será completamente quebrado.
As advertências usuais: não sou de forma alguma um especialista em LaTeX (nunca me preocupei em ler o livro do TeX, se isso servir de indicação), então muito disso vem de tentativa e erro. Espero que alguém com um conhecimento mais profundo do TeX possa corrigir quaisquer erros no meu raciocínio.
Para maior clareza, veja como você usaria esse código na prática:
\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}
Ao testar isso, descobri que ele quebra se a página com o turnpage
ambiente for a única página no documento. Você pode corrigir isso rapidamente experimentando usar shipout/before
em vez de shipout/after
no arquivo \appdef
. No entanto, desde que haja algum outro conteúdo, parece funcionar bem.
* Sua pergunta me parece perfeitamente clara, para ser sincero. Não tenho certeza sobre a fonte da confusão.
** O único caso extremo em que consigo pensar é quando o sideways
float está perfeitamente posicionado de forma que a \pagebreak
já ocorreu naturalmente antes dele e, portanto, a páginadepoiso sideways
é girado em vez disso. Não tenho certeza se isso pode realmente acontecer - testá-lo inserindo um \pagebreak
pouco antes do float ainda produzir bons resultados - mas deve ser fácil modificar o código que forneci para lidar com esse caso específico, se for o caso. acontece.