水平对齐不同大小的文本

水平对齐不同大小的文本

我想将两个包含不同大小文本的节点左对齐,以使小文本的左侧与大文本的左侧对齐。我发现它们之间存在一个小但明显的间隙:

在此处输入图片描述

我想要的是类似这样的效果,它是通过在 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

这不是一个令人满意的答案,而是一个框架:

这个想法是font =Z 希望用户使用和传递字体命令node font =。这些命令存储在\tikz@textfont\tikz@node@textfont中以供以后使用。所以至少这部分可以自动化。

一旦计算出所需的偏移量,就有两种方法可以实现

  • 通过简单地传递来移动节点xshift = -offset;这将影响未来定位的锚点。
  • 添加负胶水;这可以通过重新定义来完成\tikz@text@action。实际上,如果用户传递text ragged left或任何文本对齐样式,则会重新定义此命令。

现在,将您所做的一切包装到样式键中。如果您希望不同的首字母有不同的偏移量,则可以使用参数定义样式。


在以下示例中,我使用了两倍的字距A作为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}

相关内容