为了说明事物,我创建了一个 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}