Graphicx,\rotatebox 使旋轉原點位於周圍盒子內的相同位置(如果盒子未旋轉)

Graphicx,\rotatebox 使旋轉原點位於周圍盒子內的相同位置(如果盒子未旋轉)

為了說明問題,我創建了一個 mwe,其中在表格中包含單元格,其中包含一些文本的框圍繞其參考點旋轉。

左欄和右欄包含相同的內容。右欄還包含一些矩形,以便您可以看到原始框的參考點以及旋轉後框的測量值。

當查看第二行時,似乎\rotateboxgraphx 套件的命令將旋轉結果包裝到一個盒子中。

當將 - 命令傳遞的盒子放入周圍的盒子時\rotatebox,我希望旋轉的旋轉原點最終位於盒子未旋轉時最終所處的位置。從下面範例的編譯結果的第三表行可以看出。 (在下面的 mwe 中,「周圍的方塊」是儲存由表格環境建立的表格儲存格的內容的方塊。)

由於我選擇了圍繞框的參考點以逆時針 45 度角進行旋轉的特殊情況,因此需要向左進行一些“手動”移動/字距調整,這可以很容易計算。

但我仍然想知道我是否忽略了一種不太麻煩的方法,這種方法可能在grfguide 中描述,用於使旋轉的旋轉原點最終位於周圍盒子內的同一位置,如果盒子不旋轉,它最終會到達該位置。 (在下面的 mwe 中,「周圍的方塊」是儲存由表格環境建立的表格儲存格的內容的方塊。)

(為了計算事物,可以將旋轉和未旋轉的事物\phantom包裹到零寬度/高度/深度的盒子中,保存tikzpictures 以存儲一些坐標......,但我想知道是否有一些簡單的方法可以做我在閱讀時忽略的事情grf指南。

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

在此輸入影像描述

相關內容