指定 tikzpicture 的宽度和高度

指定 tikzpicture 的宽度和高度

是否可以指定 的宽度和高度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/是有意义的。只有选项才有意义。widthpgfplotstikzpicturescale

解释:

在 中tikzpicture,您可以指定所有坐标,因此图片的大小与所需大小相同。因此,如果您说从 画一条线,您(0,0) to (4,0)将得到一条很长的线4cmcm这是默认的测量单位)。因此,应用比例因子0.5会使这条线变长。但是,在 的框中2cm画一条线是什么意思呢? 也许您只想首先查看图片的部分,然后您要剪切图片,并且有一个宏可以执行此操作,称为。4cm2cm wide
2.0cm\clip

现在,默认情况下单位被假定为cm,因此 (4,0) 对应于4cmx 方向。有一个选项可以指定使用与 不同的单位x=<length>,但这又是缩放。

但是,使用诸如 之类的绘图包pgfplots,可以计算绘图的大小,并且可以确定每个轴方向上的单位对应的物理尺寸。因此,对于绘制图形的情况,有选项来指定图形的或height是非常有意义的。width

所以在我看来不是有选项来指定heightwidth是有意义的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}

输出

在此处输入图片描述

相关内容