graphicx,\rotatebox 回転の原点が、ボックスが回転していない場合と同じ場所になるようにする

graphicx,\rotatebox 回転の原点が、ボックスが回転していない場合と同じ場所になるようにする

説明のために、表の中に、テキストを含むボックスが参照点を中心に回転するセルがある mwe を作成しました。

左の列と右の列には同じものが含まれています。右の列にはさらにいくつかの長方形が含まれており、元のボックスの参照ポイントと回転の結果のボックスの測定値を確認できます。

2 行目を見ると、パッケージ graphicx のコマンドが\rotatebox回転の結果をボックスにラップしているようです。

-コマンドによって生成されたボックスを周囲のボックスに配置する場合\rotatebox、回転した回転の原点が、ボックスが回転していない場合と同じ場所になるようにします。以下の例をコンパイルした結果の 3 番目の表の行に示されています。(以下の mwe では、「周囲のボックス」は、表環境によって作成された表セルの内容を保持するボックスです。)

ボックスの参照点を中心に反時計回りに 45 度の角度で回転する特殊なケースを選択したため、左への「手動」シフト/カーニングが必要でしたが、これは簡単に計算できました。

しかし、grfguide で説明されているような、回転した回転の原点を、ボックスが回転していない場合と同じ場所に配置するための、より簡単な方法を見逃したのではないかと思います。(以下の mwe では、「周囲のボックス」とは、表形式環境によって作成されたテーブル セルの内容を保持するボックスのことです。)

(計算のために、回転したものと回転していないものを、\phantom幅/高さ/深さがゼロのボックスにラップし、座標を格納するための tikzpicture を配置することもできますが、grfguide を読んでいるときに見落としていた簡単な方法があるのではないかと思います。)

\documentclass{article}
\usepackage{graphicx, xcolor}

\ExplSyntaxOn\cs_new_eq:NN \fpeval \fp_eval:n\ExplSyntaxOff

\newbox\boxtorotate

\newlength\scratchy
\newcommand\Osepfbox[1]{{%
  \scratchy=\fboxsep
  \colorlet{saved}{.}%
  \fboxsep=-\fboxrule
  \color{lightgray}%
  \fbox{\fboxsep=\scratchy\color{saved}#1}%
}}%

\newcommand*\referencepointbox{%
  \hbox{%
    {%
      \color{lightgray}%
      \kern-\fboxrule \kern-\fboxsep \kern-.2pt
      \vbox{%
        \hbox{%
          \fbox{\vrule height 0.2pt depth 0.2pt width 0.4pt}%
        }%
        \kern-\prevdepth
      }%
      \kern-\fboxrule \kern-\fboxsep \kern-0.2pt
    }%
    \copy\boxtorotate
  }%
}%

\newcommand*\noreferencepointbox{\hbox{\copy\boxtorotate}}

\begin{document}

\setbox\boxtorotate=\hbox{Some text}

\begin{tabular}{|l|l|}
\hline&\\
\rlap{\noreferencepointbox}\rotatebox[x=0pt, y=0pt]{0}{\noreferencepointbox}&
\rlap{\referencepointbox}\Osepfbox{\rotatebox[x=0pt, y=0pt]{0}{\referencepointbox}}%
\\&\\
\hline&\\
\rlap{\noreferencepointbox}\rotatebox[x=0pt, y=0pt]{45}{\noreferencepointbox}&
\rlap{\referencepointbox}\Osepfbox{\rotatebox[x=0pt, y=0pt]{45}{\referencepointbox}}%
\\&\\
\hline&\\
\rlap{\noreferencepointbox}%
\kern-\fpeval{sqrt((\ht\boxtorotate)*(\ht\boxtorotate)*0.5)}pt 
\rotatebox[x=0pt, y=0pt]{45}{\noreferencepointbox}&
\rlap{\referencepointbox}%
\kern-\fpeval{sqrt((\ht\boxtorotate)*(\ht\boxtorotate)*0.5)}pt
\Osepfbox{\rotatebox[x=0pt, y=0pt]{45}{\referencepointbox}}%
\\&\\
\hline
\end{tabular}

\end{document}

ここに画像の説明を入力してください

関連情報