我正在尝试创建文本居中的 tikz 节点,但更改字体大小。不幸的是,虽然正常大小的文本在节点内很好地居中,但较小的文本没有居中,而是向左移动。
在我阅读了所有内容之后,我认为这种情况可能会发生,因为围绕其为中心的轴是根据正常字体计算出来的,但直到现在我还没有找到解决方法或解决方案。
下面的例子说明了其效果:
\documentclass{scrbook}
\usepackage{tikz}
\usetikzlibrary{shapes,chains,scopes,positioning,arrows}
\tikzstyle{block} = [draw, rectangle, rounded corners, very thick, text centered]
\begin{document}
\tikzset{block/.append style={text width=15em, minimum height=2em,font=\normalsize}}
\begin{tikzpicture}
\node[block] (node1) {Short text};
\node[block, below of=node1] (node2) {A slightly longer text};
\end{tikzpicture}
\vspace{5em}
\tikzset{block/.append style={text width=10em, minimum height=2em,font=\footnotesize}}
\begin{tikzpicture}
\node[block] (node1) {Short text};
\node[block, below of=node1] (node2) {A slightly longer text};
\end{tikzpicture}
\end{document}
答案1
(我很确定我们以前有过这个,但我找不到它。)
问题是您使用字体特定的尺寸来指定宽度(text width=10em
)。对于应该使用哪种字体大小来计算该宽度,可能会产生歧义:应该是环境字体大小(即“正常”大小)还是内部字体大小(即\footnotesize
)?为了确保没有人对其计算结果感到失望,TikZ 会同时使用两者。也就是说,它需要知道text width
并且需要根据计算一次来计算它内部的字体和一次相对于周围的字型。
如果您希望 TikZ 的帮助小一点,则需要决定应该使用两种计算方法中的哪一种。最简单的方法是使用环境字体大小。为此,我们只需确保在更改字体之前完成第一次宽度计算。这可以通过将键更改font=\footnotesize
为 来实现execute at begin node=\footnotesize
。这会将字体更改置于宽度计算之后,因此10em
两次都被视为“在环境字体中”。
有几种方法可以强制10em
使用内部字体。第一种方法是使内部字体与环境字体相同。这是通过放入\footnotesize
图片来实现的。您可以将其放在组或范围内以限制其效果。另一种方法是在影响下明确计算长度\footnotesize
,然后将计算出的长度提供给text width
键。
这里有一些例子。
\documentclass{scrbook}
%\url{http://tex.stackexchange.com/q/54368/86}
\usepackage{tikz}
\usetikzlibrary{shapes,chains,scopes,positioning,arrows}
\tikzset{block/.style={draw, rectangle, rounded corners, very thick, text centered}}
\begin{document}
\begin{tikzpicture}
\tikzset{block/.append style={text width=15em, minimum height=2em,font=\normalsize}}
\node[block] (node1) {Short text};
\node[block, below of=node1] (node2) {A slightly longer text};
\end{tikzpicture}
\vspace{5em}
\begin{tikzpicture}
\tikzset{block/.append style={text width=10em, minimum height=2em,font=\footnotesize}}
\node[block] (node1) {Short text};
\node[block, below of=node1] (node2) {A slightly longer text};
\end{tikzpicture}
\vspace{5em}
\begin{tikzpicture}
\tikzset{block/.append style={text width=10em, minimum height=2em,execute at begin node=\footnotesize}}
\node[block] (node1) {Short text};
\node[block, below of=node1] (node2) {A slightly longer text};
\end{tikzpicture}
\vspace{5em}
\begin{tikzpicture}
\footnotesize
\tikzset{block/.append style={text width=10em, minimum height=2em}}
\node[block] (node1) {Short text};
\node[block, below of=node1] (node2) {A slightly longer text};
\end{tikzpicture}
\vspace{5em}
\begin{tikzpicture}
{\footnotesize
\pgfmathparse{10em}
\global\let\pgfmathresult=\pgfmathresult
}
\let\nwidth=\pgfmathresult
\tikzset{block/.append style={text width=\nwidth, minimum height=2em,font=\footnotesize}}
\node[block] (node1) {Short text};
\node[block, below of=node1] (node2) {A slightly longer text};
\end{tikzpicture}
\end{document}
请注意,当我重复相同的代码时,我移动了append style
每个代码里面的内容tikzpicture
,以免其效果累积。