revtex e turnpage: gire também a visualização da página PDF em 90 graus para a orientação horizontal

revtex e turnpage: gire também a visualização da página PDF em 90 graus para a orientação horizontal

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-1e 4-2) fornecer o turnpageambiente, 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 \clearpagenão é crítico - espero que \pagebreakfuncione tão bem - a questão é que podemos definir a rotação da página PDF redefinindo a \pdfpageattrmacro antes que a página seja enviada.

Agora, olhei a definição do turnpageambiente ( \ShowCommand{\turnpage}; \endturnpagenã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 sidewaysambiente 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. source2eseçã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 \pdfpageattrcorretamente 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-doce 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 turnpageambiente for a única página no documento. Você pode corrigir isso rapidamente experimentando usar shipout/beforeem vez de shipout/afterno 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 sidewaysfloat está perfeitamente posicionado de forma que a \pagebreakjá 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 \pagebreakpouco 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.

informação relacionada