![graphicx,\rotatebox 旋转原点位于周围框内的同一位置,如果框未旋转,旋转原点最终位于该位置](https://linux22.com/image/462137/graphicx%2C%5Crotatebox%20%E6%97%8B%E8%BD%AC%E5%8E%9F%E7%82%B9%E4%BD%8D%E4%BA%8E%E5%91%A8%E5%9B%B4%E6%A1%86%E5%86%85%E7%9A%84%E5%90%8C%E4%B8%80%E4%BD%8D%E7%BD%AE%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%A1%86%E6%9C%AA%E6%97%8B%E8%BD%AC%EF%BC%8C%E6%97%8B%E8%BD%AC%E5%8E%9F%E7%82%B9%E6%9C%80%E7%BB%88%E4%BD%8D%E4%BA%8E%E8%AF%A5%E4%BD%8D%E7%BD%AE.png)
为了说明事物,我创建了一个 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}