
Ich möchte zwei Knoten, die Text unterschiedlicher Größe enthalten, linksbündig ausrichten, sodass der kleine Text genau links vom großen Text ausgerichtet ist. Dabei stelle ich fest, dass zwischen ihnen eine kleine, aber erkennbare Lücke besteht:
Ich hätte gerne so etwas wie das hier. Ich habe es erhalten, indem ich die PDF-Datei in Inkscape geöffnet und das Ausrichtungswerkzeug verwendet habe:
Ein kleiner Unterschied, sicherlich; aber ich bin eigen. Gibt es eine bessere Möglichkeit, den Text als solchen auszurichten, als dies manuell zu tun?
Das obige Beispiel wurde durch den folgenden Code generiert:
\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}
Antwort1
Dies ist keine zufriedenstellende Antwort, sondern eher ein Rahmen:
Die Idee ist, dass TikZ erwartet von Benutzern, dass sie Schriftbefehle mit font =
und übergeben node font =
. Diese Befehle werden für die spätere Verwendung in \tikz@textfont
und gespeichert \tikz@node@textfont
. Zumindest dieser Teil kann also automatisiert werden.
Sobald der gewünschte Offset berechnet ist, gibt es zwei Möglichkeiten
- Verschieben Sie den Knoten durch einfaches Übergeben
xshift = -offset
. Dadurch werden die Anker für die zukünftige Positionierung beeinflusst. - negative Klebstoffe hinzufügen; dies kann durch Neudefinition erfolgen
\tikz@text@action
. Tatsächlich wird dieser Befehl neu definiert, wenn der Benutzertext ragged left
einen beliebigen Textausrichtungsstil übergibt.
Jetzt fassen wir alles, was Sie getan haben, in einen Stilschlüssel zusammen. Wenn Sie für verschiedene Anfangsbuchstaben unterschiedliche Offsets wünschen, können Sie einen Stil mit Argument(en) definieren.
Im folgenden Beispiel habe ich den doppelten Abstand zwischen A
und V
als Versatz verwendet. Ich sage nicht, dass das richtig ist. Aber \XeTeXglyphbounds
es könnte sein, dass Sie nicht das richtige Ergebnis erhalten. Der Grund ist derselbe, warum wirÜberschwingen).
\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}