graphicx,\rotatebox 旋转原点位于周围框内的同一位置,如果框未旋转,旋转原点最终位于该位置

graphicx,\rotatebox 旋转原点位于周围框内的同一位置,如果框未旋转,旋转原点最终位于该位置

为了说明事物,我创建了一个 mwe,其中在表格中有一个单元格,其中包含一些文本的框围绕其参考点旋转。

左列和右列包含相同的内容。右列还包含一些矩形,以便您可以看到原始框的参考点和旋转后的框的测量值。

当查看第二行时,似乎\rotatebox包 graphicx 的命令将旋转的结果包装到一个盒子中。

当将 -command 传递的框放入周围框中时\rotatebox,我希望旋转的旋转原点最终位于框未旋转时最终所在的位置。如以下示例编译结果的第三行表格所示。(对于下面的 mwe,“周围框”是包含由表格环境创建的表格单元格内容的框。)

由于我选择了特殊情况,即围绕框的参考点以逆时针 45 度的角度进行旋转,因此需要进行一些向左的“手动”移动/字距调整,这可以轻松计算出来。

但是我仍然想知道我是否忽略了 grfguide 中可能描述的一种不太麻烦的方法,该方法可以使旋转的旋转原点最终位于周围框中的同一位置,如果框未旋转,它将最终位于该位置。 (对于下面的 mwe,“周围框”是包含由表格环境创建的表格单元内容的框。)

(为了计算事物,人们可以将旋转和未旋转的事物\phantom放入零宽度/高度/深度的盒子中,其中包含 tikzpictures 以存储一些坐标......,但我想知道是否有一些简单的方法可以做我在阅读 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}

在此处输入图片描述

相关内容