異なるサイズのテキストを水平に揃える

異なるサイズのテキストを水平に揃える

異なるサイズのテキストを含む 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

これは満足のいく答えではありませんが、むしろ枠組みです。

そのアイデアは、Tifont =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}

関連情報