是否可以指定 的宽度和高度tikzpicture
?要缩放 ,tikzpicture
我使用选项scale
,例如
\begin{tikzpicture}[scale = 2]
...
\end{tikzpicture}
我尝试将宽度和高度更改为
\begin{tikzpicture}[width = 2in, height = 3in]
...
\end{tikzpicture}
但这给了我一个错误“我不知道键/tikz/width”。
答案1
编辑:
我回到这里来添加有关tikzscale
包裹的信息,但是我发现一个答案关于这一点,本帖已经提到过。我相信你会想尝试一下。
resizebox
在 之外使用tikzpicture
。
\resizebox{width}{height}{object}
例如:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{figure}
\centering
\resizebox{\columnwidth}{!}{%
\begin{tikzpicture}
\node [draw] (my node 1) {my node 1};
\node [draw, anchor = west] (my node 2) at (my node 1.east) {centro};
\node [draw, anchor = west] at (my node 2.east) {my node 3};
\end{tikzpicture}%
}
\end{figure}
\end{document}
答案2
将我的评论转换为答案,因为我认为问题更多的是关于指定一个height
,width
选项,而不是如何缩放图片以使其具有合适的大小。
概括:
确实如此不是指定height
/width
有意义tikzpicture
,但是做能够指定图表的height
/是有意义的。只有选项才有意义。width
pgfplots
tikzpicture
scale
解释:
在 中tikzpicture
,您可以指定所有坐标,因此图片的大小与所需大小相同。因此,如果您说从 画一条线,您(0,0) to (4,0)
将得到一条很长的线4cm
(cm
这是默认的测量单位)。因此,应用比例因子0.5
会使这条线变长。但是,在 的框中2cm
画一条线是什么意思呢? 也许您只想首先查看图片的部分,然后您要剪切图片,并且有一个宏可以执行此操作,称为。4cm
2cm wide
2.0cm
\clip
现在,默认情况下单位被假定为cm
,因此 (4,0) 对应于4cm
x 方向。有一个选项可以指定使用与 不同的单位x=<length>
,但这又是缩放。
但是,使用诸如 之类的绘图包pgfplots
,可以计算绘图的大小,并且可以确定每个轴方向上的单位对应的物理尺寸。因此,对于绘制图形的情况,有选项来指定图形的或height
是非常有意义的。width
所以在我看来不是有选项来指定height
或width
是有意义的tikzpicture
,但能够应用scale
选项也是有意义的。对于诸如 的绘图环境,pgfplots
能够指定height
、 和是非常有意义的width
,这些在环境选项中可用axis
。
答案3
我知道这是一个相当老的帖子,但它确实在谷歌中作为第一个结果出现,所以我想在这里添加一个仍然缺失的解决方案。
如果你的 tikzpicture 位于单独的文件中,例如 Tom Bombadil 的回答中所述,则可以使用该包tikzscale.然后您可以在文档中使用
\includegraphics[width=\linewidth]{mytikzpic}
该文件mytikzpic.tikz
仅包含 tikzcode:
%mytikzpic.tikz
\begin{tikzpicture}
%some tikz code
\end{tikzpicture}
tikzscale
使用迭代方法将图片缩放到所需大小,从而多次编译图片代码。这将延长文档的编译时间。tikz
但它与 externalize 库配合得很好,可以再次节省大部分开销。
答案4
这使用了我的回答的一部分这个问题:首先虚拟绘制图像以获取缩放因子,然后使用这些因子进行绘制。
代码
\documentclass{scrartcl}
\usepackage[margin=20mm]{geometry}
\usepackage{tikz}
\usepackage{filecontents}
\usepackage{xifthen}
\newcommand{\getsizes}[2]% width, height
{ \path (current bounding box.south west);
\pgfgetlastxy{\xsw}{\ysw}
\path (current bounding box.north east);
\pgfgetlastxy{\xne}{\yne}
\pgfmathsetmacro{\picwidth}{(\xne-\xsw)/28.453}
\pgfmathsetmacro{\picheight}{(\yne-\ysw)/28.453}
\pgfmathsetmacro{\picxscale}{#1/\picwidth}
\pgfmathsetmacro{\picyscale}{#2/\picheight}
\xdef\xsca{\picxscale}
\xdef\ysca{\picyscale}
}
\newcommand{\xyscaledtikz}[3]% draw commands, width, height
{ \smash{\vphantom{
\begin{tikzpicture}
#1
\getsizes{#2}{#3}
\end{tikzpicture}
}}
\begin{tikzpicture}[xscale=\xsca,yscale=\ysca]
#1
\end{tikzpicture}
}
\begin{filecontents}{sample.tex}
\draw[rotate=30,left color=red,right color=blue] (0,0) rectangle (5,5);
\end{filecontents}
\begin{document}
\xyscaledtikz{\input{picone}}{2}{3}
\xyscaledtikz{\input{picone}}{6}{1}
\xyscaledtikz{\input{picone}}{2}{7}
\xyscaledtikz{\input{picone}}{4}{4}
\end{document}