我想将两个包含不同大小文本的节点左对齐,以使小文本的左侧与大文本的左侧对齐。我发现它们之间存在一个小但明显的间隙:
我想要的是类似这样的效果,它是通过在 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}