使用相对定位时将 TikZ 图形缩放到线宽

使用相对定位时将 TikZ 图形缩放到线宽

这个问题是如何将 tikzpicture 缩放到 \textwidth。不幸的是,我成为会员的时间还不够长,无法在该主题中发表评论以寻求澄清。

我使用相对定位命令(如“右侧”和“下方”)绘制了一些图形。似乎使用这些命令时,大多数典型的缩放方法都不再起作用。例如,下面是来自http://texample.net。我已将代码包含在下方,以防将来示例发生变化。

假设我想缩放下面示例中的图形。如果我使用

\begin{tikzpicture}[node distance = 2cm, auto, scale=0.5]

什么都没发生。我也尝试了上面链接中的第一种方法,将 tikz 图形缩放到\linewidth。它对我不起作用。有人能告诉我如何制作这种类型的图形吗

  1. 像我展示的那样缩放到某个常数,并且

  2. 缩放至\linewidth

示例简单流程图(修改版)来自
http://www.texample.net/tikz/examples/simple-flow-chart/

\documentclass[12pt,oneside, ]{report} 

\usepackage[latin1]{inputenc}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}

\begin{document}
%\pagestyle{empty}

% Define block styles
\tikzstyle{decision} = [diamond, draw, fill=blue!20, 
    text width=4.5em, text badly centered, node distance=3cm, inner sep=0pt]
\tikzstyle{block} = [rectangle, draw, fill=blue!20, 
    text width=5em, text centered, rounded corners, minimum height=4em]
\tikzstyle{line} = [draw, -latex']
\tikzstyle{cloud} = [draw, ellipse,fill=red!20, node distance=3cm,
    minimum height=2em]

\begin{tikzpicture}[node distance = 2cm, auto]
    % Place nodes
    \node [block] (init) {initialize model};
    \node [cloud, left of=init] (expert) {expert};
    \node [cloud, right of=init] (system) {system};
    \node [block, below of=init] (identify) {identify candidate models};
    \node [block, below of=identify] (evaluate) {evaluate candidate models};
    \node [block, left of=evaluate, node distance=3cm] (update) {update model};
    \node [decision, below of=evaluate] (decide) {is best candidate better?};
    \node [block, below of=decide, node distance=3cm] (stop) {stop};
    % Draw edges
    \path [line] (init) -- (identify);
    \path [line] (identify) -- (evaluate);
    \path [line] (evaluate) -- (decide);
    \path [line] (decide) -| node [near start] {yes} (update);
    \path [line] (update) |- (identify);
    \path [line] (decide) -- node {no}(stop);
    \path [line,dashed] (expert) -- (init);
    \path [line,dashed] (system) -- (init);
    \path [line,dashed] (system) |- (evaluate);
\end{tikzpicture}

\end{document}

答案1

无论如何,您都可以使用已加载的包\resizebox{\linewidth}{!}{<tikz picture>}。它会将其内容缩放到给定的宽度和高度(高度意味着它会随宽度缩放)。这种方法的一个缺点是所有内容都会缩放,包括线宽和节点文本,这可能不是某些人想要的。graphicstikz!

请注意,将\resizebox整个图片作为宏参数读取,这不是很高效,并且不允许逐字或其他特殊内容。替代方案是\Resizebox(相同语法)来自我的realboxes包或{adjustbox}{width=\linewidth}来自我的adjustbox包的环境。

答案2

实际上,您可以只使用 Tikz 中的 scale 选项。通常,这不会缩放节点,因此在您的示例中什么也不会发生。但是,我们可以通过添加选项来告诉它缩放节点transform shape。通常不建议这样做,因为它会缩放所有内容,包括文本,这可能会导致看起来不好的结果。但是,据我所知,这里的所有建议都会产生完全相同的效果。最好的选择是按照您想要使用的比例创建图形,如果这不是一个选项,那么\begin{tikzpicture}[node distance = 2cm, auto, scale=0.5, transform shape]应该完全按照您的意愿进行。

答案3

两种解决方案(我不喜欢left of=等,因为无法缩放图片,而且我不喜欢\resizebox因为一切都被缩放了!)

1)你保留 left of=等,但你使用类似的东西: \def\myscale{2}然后为每个node distance你写例如 node distance=3*\myscale cm 现在你可以添加\begin{tikzpicture}[scale=\myscale ...

2)你可以left of=init用类似:\node [cloud](expert) at ([xshift=-3cm]init) {expert};等的内容替换。

相关内容