
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:
O que eu gostaria é algo assim, obtido abrindo o PDF no Inkscape e usando a ferramenta de alinhamento:
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@textfont
e \tikz@node@textfont
para 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 passartext ragged left
ou 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 A
e V
como deslocamento. Não estou dizendo que isso esteja correto. Mas \XeTeXglyphbounds
també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}