Texto alineado horizontalmente de diferentes tamaños.

Texto alineado horizontalmente de diferentes tamaños.

Me gustaría alinear a la izquierda dos nodos que contienen texto de diferente tamaño, de modo que la izquierda exacta del texto pequeño esté alineada exactamente a la izquierda del texto grande. Lo que encuentro es que hay una brecha pequeña pero notable entre ellos:

ingrese la descripción de la imagen aquí

Lo que me gustaría es algo como esto, que se obtuvo abriendo el PDF en Inkscape y usando la herramienta de alineación:

ingrese la descripción de la imagen aquí

Una pequeña diferencia, ciertamente; pero soy particular. ¿Existe alguna forma mejor de alinear el texto como tal que hacerlo manualmente?

El ejemplo anterior fue generado por el siguiente 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}

Respuesta1

Esta no es una respuesta satisfactoria, sino más bien un marco:

La idea es que TikZ espera que los usuarios pasen comandos de fuentes usando font =y node font =. Esos comandos se almacenan en \tikz@textfonty \tikz@node@textfontpara su uso posterior. Entonces al menos esta parte se puede automatizar.

Una vez que se calcula el desplazamiento deseado, hay dos caminos a seguir

  • cambie el nodo simplemente pasando xshift = -offset; esto afectará los anclajes para posicionamiento futuro.
  • añadir pegamentos negativos; esto se puede hacer redefiniendo \tikz@text@action. De hecho, este comando se redefine si el usuario pasa text ragged leftcualquier estilo de alineación de texto.

Ahora, envuelva todo lo que hizo en una clave de estilo. Si desea diferentes compensaciones para diferentes letras iniciales, puede definir un estilo con argumentos.


En el siguiente ejemplo, utilicé el doble de interletraje entre Ay Vcomo desplazamiento. No digo que esto sea correcto. Pero \XeTeXglyphboundses posible que tampoco le proporcione el resultado correcto. La razón es la misma por la que necesitamosexcederse).


\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}

información relacionada