revtex と turnpage: PDF ページビューを水平方向に 90 度回転します

revtex と turnpage: PDF ページビューを水平方向に 90 度回転します

次のrevtex4では、ターンページを作成してPDFページビューを90度回転させて、水平方向(コンテンツを90度回転させるだけでなく、ページを同じままにする)垂直オリエンテーション)?

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

\begin{turnpage}

\begin{figure} or 
\begin{table}

[...]

\end{figure} or \end{table}

\end{turnpage}

その他の同様の機能は次のとおりです。

\usepackage{lscape} 

\begin{landscape} 

\end{landscape} 

答え1

コメントに混乱があるようなので、私が理解したとおりに質問を言い直すと、revtex4(4-1および4-2) はturnpage、コンテンツを横向きにタイプセットする環境を提供します。ただし、PDF では横向きのページが縦向きで表示されます。このページを横向きにタイプセットするだけでなく、同じ向きで表示したいのです。*

私はここから入手した「魔法のコード」を使ってこれを実現することができました:emulateapj を使用した横長のテーブルを ArXiv に公開する特に、関連するコード行は次のとおりです。

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

このコードにより、この2行以降のページは横向きにタイプセットされ、この2行前のページは縦向きに保たれます。なぜこのマクロは正確に機能します (機能する場合はこの回答を更新します) が、質問に記載されている目標を達成するにはこれで十分と思われます。特に、は\clearpage重要ではないことに注意してください (同様に機能すると期待しています)。重要なのは、ページが出荷される前にマクロ\pagebreakを再設定することで PDF ページの回転を設定できるということです。\pdfpageattr

ここで、環境の定義turnpage( \ShowCommand{\turnpage};\endturnpageは何も行いません) を確認したところ、次のようになりました。

\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} }
    }
  }

ここで、空白は私が付けたもので、わかりやすくするためのものです。つまり、環境sidewaysは特別なことは何もせず、ページサイズのフロートを設定し、フロートの内容を回転させるコードを追加しているだけです。(ここでは、source2eセクション P1 です。)

このフロートが常に次のページにプッシュされると仮定すると (この仮定がどれほど大きなものであるかは完全にはわかりませんが、実際にはうまく機能しています**)、\pdfpageattr次のページの先頭で適切に設定し、次のページの先頭で PDF の方向をリセットすると、このフロートを横向きで表示できます。

私は、shipout フック (つまり、lthooks-docltshipout-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}%
    }%
  }%
}

これがいかに堅牢であるか(LaTeX の意味ではなく、日常的な意味で)に驚いています。私の文書では、まったく壊れていません。重要なのは、これを と一緒に使用していることです。table*アスタリスクは基本です。そうでない場合、 を変更しなくてもrevtex4、フロートの配置は完全に壊れます。

いつもの注意事項: 私は決して LaTeX の専門家ではありません (TeX の本を読んだこともありません)。そのため、この作業の多くは試行錯誤から生まれたものです。TeX についてより深い知識を持つ方が、私の推論の誤りを訂正してくれることを願っています。

わかりやすくするために、このコードを実際に使用する方法を次に示します。

\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}

これをテストしているときに、 環境のページがドキュメント内の唯一のページである場合に機能しないことがわかりました。での代わりにturnpageを使用して試してみると、この問題を素早く修正できます。ただし、他のコンテンツがある限り、問題なく機能するようです。shipout/beforeshipout/after\appdef

* 正直に言うと、あなたの質問は私には完全に明確に思えます。混乱の原因が何なのかはわかりません。

** 私が考えられる唯一の例外は、sidewaysフロートが完璧に配置されていて、\pagebreakその前にすでに自然に発生している場合です。そのため、ページ代わりにがsideways回転します。これが実際に起こるかどうかはわかりませんが、\pagebreakfloat の直前に を挿入してテストすると、依然として良好な結果が得られます。ただし、そのようなことが起こった場合、その特定のケースに対処するために私が提供したコードを変更するのは簡単なはずです。

関連情報