
異なるサイズのテキストを含む 2 つのノードを左揃えにして、小さいテキストの正確な左が大きいテキストの正確な左に揃えたいのですが、その間に小さいながらも目立つ隙間があることがわかりました。
私が欲しいのは、Inkscape で PDF を開いて位置合わせツールを使用することで得られる次のようなものです。
確かに小さな違いですが、私はこだわりがあります。手動で行うよりも、テキストを揃えるより良い方法はあるでしょうか?
上記の例は次のコードによって生成されました。
\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}
答え1
これは満足のいく答えではありませんが、むしろ枠組みです。
そのアイデアは、Tiけfont =
Z は、ユーザーがと を使用してフォント コマンドを渡すことを想定しています。これらのコマンドは、後で使用するためにとにnode font =
保存されます。したがって、少なくともこの部分は自動化できます。\tikz@textfont
\tikz@node@textfont
希望するオフセットが計算されたら、2つの方法があります。
- を渡すだけでノードをシフトします
xshift = -offset
。これは将来の配置のアンカーに影響します。 - 負のグルーを追加します。これは を再定義することで実行できます
\tikz@text@action
。実際、このコマンドは、ユーザーがtext ragged left
または任意のテキスト配置スタイルを渡すと再定義されます。
ここで、行ったすべての操作をスタイル キーにラップします。異なる最初の文字に異なるオフセットが必要な場合は、引数を使用してスタイルを定義できます。
次の例では、オフセットとしてA
との間のカーニングを2倍にしています。これが正しいと言っているわけではありません。正しい結果が得られない可能性もあります。理由は、V
\XeTeXglyphbounds
オーバーシュート)。
\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}