如何缩放包含文本的 tikzpicture?

如何缩放包含文本的 tikzpicture?

看起来该scale选项只缩放行的长度,而不缩放文本的大小。例如,以下代码中的1和和 不缩放。true

\begin{tikzpicture}[thick, scale=0.6]
\draw [dashed] (1,12) -- (11,12);
\node[above] at (4,11) {1}; \node[above] at (8,11) {true};
\end{tikzpicture}

有人能告诉我如何在 tikzpicture 中缩放所有内容吗?非常感谢!

PS:这是与 Beamer 一起演示时的图片。

答案1

缩放不会影响某些方面;最明显的是节点大小和线宽。在简单的图片中,相应地调整线宽并不难,但节点可能很难。可以强制缩放节点:将缩放选项直接放在节点的属性中。这样就\node[above,scale=0.6] at (8,11) {true};可以缩放节点。在每个节点上都这样做有点烦人,所以有一种every node样式可以用来做到这一点。因此:

\begin{tikzpicture}[thick,scale=0.6, every node/.style={scale=0.6}]

即便如此,如果您想更改比例因子,您仍然必须记住每次都在此处更改两件事。幸运的是,有一个键transform shape表示当前变换已应用于节点。使用此功能的危险在于,这还会应用任何恰好对节点有效的旋转(通常只应用平移)。如果您没有任何旋转,那么:

\begin{tikzpicture}[thick,scale=0.6, every node/.style={transform shape}]

就很好了。

如果您确实有或者担心这些旋转(或者任何其他感兴趣的人),那么设置一个global scale键来解决这个问题很简单:

\tikzset{global scale/.style={
    scale=#1,
    every node/.style={scale=#1}
  }
}

回到“正常”的解决方案。以下是各种解决方案:

\documentclass{standalone}
\usepackage{tikz}

\begin{document}

\framebox{\begin{tikzpicture}[thick]
\draw [dashed] (1,12) -- (11,12);
\node[above] at (4,11) {1}; \node[above] at (8,11) {true};
\end{tikzpicture}}

\framebox{\begin{tikzpicture}[thick, scale=0.6]
\draw [dashed] (1,12) -- (11,12);
\node[above] at (4,11) {1}; \node[above] at (8,11) {true};
\end{tikzpicture}}

\framebox{\begin{tikzpicture}[thick, transform canvas={scale=0.6}]
\draw [dashed] (1,12) -- (11,12);
\node[above] at (4,11) {1}; \node[above] at (8,11) {true};
\end{tikzpicture}}

\framebox{\begin{tikzpicture}[thick,scale=0.6, every node/.style={scale=0.6}]
\draw [dashed] (1,12) -- (11,12);
\node[above] at (4,11) {1}; \node[above] at (8,11) {true};
\end{tikzpicture}}

\framebox{\begin{tikzpicture}[thick,scale=0.6, every node/.style={transform shape}]
\draw [dashed] (1,12) -- (11,12);
\node[above] at (4,11) {1}; \node[above] at (8,11) {true};
\end{tikzpicture}}

\end{document}

我把\frameboxs 放进去,因为如果你仔细数的话,你会看到第三个例子没有吗!事实上,它最终出现在页面顶部的某个位置,超出了包装standalone所认为的页面范围。所以它被剪掉了。

缩放图片

答案2

如果你想缩放 tikz 图片中的所有内容,你也可以将其放在\scalebox\resizebox(来自包图形/x

例子:

\scalebox{0.6}{
[Your tikz goes here]
}
\resizebox{.75\textwidth}{!}{
[Your tikz goes here]
}

这也适用于节点、文本等,相反,transform canvas它不会将您的图片传送到没有人会想到的地方,这曾经发生在我身上。

答案3

transform canvas选项会缩放所有内容,包括文本。请注意,这可能会导致边界框错误...

答案4

该包adjustbox可用于此目的。 它使用起来相当简单,而且与resizebox和相比似乎更强大、更通用scalebox

相关内容