graphicx,\rotatebox Tendo a origem da rotação terminando no mesmo lugar dentro da caixa circundante onde terminaria se a caixa não fosse girada

graphicx,\rotatebox Tendo a origem da rotação terminando no mesmo lugar dentro da caixa circundante onde terminaria se a caixa não fosse girada

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 \rotateboxdo pacote graphicx envolve o resultado da rotação em uma caixa.

Ao colocar na caixa circundante a caixa que é entregue pelo \rotateboxcomando -, 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 \phantomembrulhadas 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}

insira a descrição da imagem aqui

informação relacionada