Для иллюстрации я создал MWe, в котором в таблице есть ячейки, в которых поле, содержащее текст, вращается вокруг своей опорной точки.
Левый и правый столбцы содержат то же самое. Правый столбец дополнительно содержит несколько прямоугольников, чтобы вы могли видеть опорные точки исходных ящиков и измерения ящиков, полученных в результате вращения.
Если посмотреть на вторую строку, то кажется, что команда \rotatebox
пакета graphicx оборачивает результат поворота в рамку.
При размещении в окружающем блоке блока, который доставляется командой \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}