Alinhar horizontalmente texto de tamanhos diferentes

Alinhar horizontalmente texto de tamanhos diferentes

Gostaria de alinhar à esquerda dois nós que contêm texto de tamanhos diferentes, de modo que a esquerda exata do texto pequeno fique alinhada exatamente à esquerda do texto grande. O que estou descobrindo é que há uma lacuna pequena, mas perceptível entre eles:

insira a descrição da imagem aqui

O que eu gostaria é algo assim, obtido abrindo o PDF no Inkscape e usando a ferramenta de alinhamento:

insira a descrição da imagem aqui

Uma pequena diferença, certamente; mas eu sou específico. Existe alguma maneira melhor de alinhar o texto do que fazê-lo manualmente?

O exemplo acima foi gerado pelo seguinte código:

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
    \usetikzlibrary{positioning}

    \node[anchor=text] (largetext) {
        \Huge Large text.};
    \node[below=.4cm of largetext.text, anchor=text] (smalltext) {
        \large small text.};

    \draw[red] (largetext.text) ++ (0,.7) -- (smalltext.text);
\end{tikzpicture}

\end{document}

Responder1

Esta não é uma resposta satisfatória, mas sim uma estrutura:

A idéia é que TikZ espera que os usuários passem comandos de fonte usando font =e node font =. Esses comandos são armazenados \tikz@textfonte \tikz@node@textfontpara uso posterior. Então pelo menos essa parte pode ser automatizada.

Depois que o deslocamento desejado for calculado, há dois caminhos a seguir

  • mude o nó simplesmente passando xshift = -offset; isso afetará as âncoras para posicionamento futuro.
  • adicione colas negativas; isso pode ser feito redefinindo \tikz@text@action. Na verdade, este comando é redefinido se o usuário passar text ragged leftou qualquer estilo de alinhamento de texto.

Agora, agrupando tudo o que você fez em uma chave de estilo. Se desejar deslocamentos diferentes para letras iniciais diferentes, você pode definir um estilo com argumento(s).


No exemplo a seguir, usei o dobro do kerning entre Ae Vcomo deslocamento. Não estou dizendo que isso esteja correto. Mas \XeTeXglyphboundstambém pode não fornecer o resultado correto. A razão é a mesma que precisamosultrapassar).


\documentclass[tikz]{standalone}
\usepackage{fontspec}
\setmainfont{Futura}

\begin{document}

\makeatletter
\tikzset{
    distil kerning/.code={%
        \let\oldtempselectfont\pgfmath@selectfont%
        \def\pgfmath@selectfont{\tikz@node@textfont\tikz@textfont\oldtempselectfont}
        \pgfmathsetmacro\pgfkerningcorrection{width("V")+width("A")-width("VA")}
        \xdef\pgfkerningcorrection{\pgfkerningcorrection}
        \let\pgfmath@selectfont\oldtempselectfont
    },
    node correction by kerning/.style={
        distil kerning,
        xshift=-\pgfkerningcorrection*2
    },
    ncbk/.style=node correction by kerning
}
\makeatother

\tikz\draw foreach\A[count=\i]in{A,...,G}{(0,\i*\i/7)node[right,font=\fontsize{\i0}{0}\selectfont,ncbk]{\A: text of size \i0.}};
\tikz\draw foreach\A[count=\i]in{A,...,G}{(0,\i*\i/7)node[right,font=\fontsize{\i0}{0}\selectfont     ]{\A: text of size \i0.}};

\end{document}

informação relacionada