Para ilustrar as coisas, criei um mwe onde dentro de uma tabela você tem células onde uma caixa contendo algum texto é girada em torno de seu ponto de referência.
As colunas esquerda e direita contêm o mesmo. A coluna da direita contém adicionalmente alguns retângulos para que você possa ver os pontos de referência das caixas originais e as medidas das caixas resultantes da rotação.
Ao olhar para a segunda linha, parece que o comando \rotatebox
do pacote graphicx envolve o resultado da rotação em uma caixa.
Ao colocar na caixa circundante a caixa que é entregue pelo \rotatebox
comando -, gostaria que a origem da rotação girada terminasse no mesmo lugar onde terminaria se a caixa não fosse girada. Como pode ser visto na terceira linha da tabela do resultado da compilação do exemplo abaixo. (Com o mwe abaixo, "a caixa circundante" é a caixa que contém o conteúdo da célula da tabela criada pelo ambiente tabular.)
Como escolhi o caso especial onde a rotação é feita em torno do ponto de referência da caixa em um ângulo de 45 graus no sentido anti-horário, foi necessário algum deslocamento/kerning "manual" para a esquerda que poderia ser facilmente calculado.
Mas ainda me pergunto se esqueci uma maneira menos complicada que pode ser descrita em grfguide para fazer com que a origem da rotação girada termine no mesmo lugar dentro da caixa circundante onde terminaria se a caixa não fosse girada. (Com o mwe abaixo, "a caixa circundante" é a caixa que contém o conteúdo da célula da tabela criada pelo ambiente tabular.)
(Para calcular coisas, pode-se colocar coisas giradas e não giradas \phantom
embrulhadas em caixas de largura/altura/profundidade zero contendo imagens tikz para armazenar algumas coordenadas..., mas me pergunto se existe alguma maneira fácil de fazer coisas que esqueci ao ler guia 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}