这个问题是如何将 tikzpicture 缩放到 \textwidth。不幸的是,我成为会员的时间还不够长,无法在该主题中发表评论以寻求澄清。
我使用相对定位命令(如“右侧”和“下方”)绘制了一些图形。似乎使用这些命令时,大多数典型的缩放方法都不再起作用。例如,下面是来自http://texample.net。我已将代码包含在下方,以防将来示例发生变化。
假设我想缩放下面示例中的图形。如果我使用
\begin{tikzpicture}[node distance = 2cm, auto, scale=0.5]
什么都没发生。我也尝试了上面链接中的第一种方法,将 tikz 图形缩放到\linewidth
。它对我不起作用。有人能告诉我如何制作这种类型的图形吗
像我展示的那样缩放到某个常数,并且
缩放至
\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>}
。它会将其内容缩放到给定的宽度和高度(高度意味着它会随宽度缩放)。这种方法的一个缺点是所有内容都会缩放,包括线宽和节点文本,这可能不是某些人想要的。graphics
tikz
!
请注意,将\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};
等的内容替换。