缩放 tikzpicture 时,TikZ“缩放”键根本没有按照预期的方式运行

缩放 tikzpicture 时,TikZ“缩放”键根本没有按照预期的方式运行

我在 TikZ 记住节点位置或只是在缩放时协调不同坐标系之间的事物(例如,在给定坐标系内命名的节点,然后从坐标系外部引用的节点)时遇到了困难tikzpicture

这是standalone我想包含在我的文档中的一个简单文档。

\documentclass[border=6pt]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{calc}

\pgfplotsset{every axis/.append style={
    font=\scriptsize,
    x=.75cm,
    y=.75cm,    
    axis x line=center,
    axis y line=center,
    x axis line style={<->},
    y axis line style={<->},
    xtick={-5,-4,...,5},
    ytick={-5,-4,...,5},
    xlabel={$x$},
    ylabel={$y$},
    xlabel style={below},
    ylabel style={left},
    xmin=-5.5, xmax=5.5,
    ymin=-5.5, ymax=5.5,
    }
}

\pgfmathdeclarefunction{myfncG}{1}{\pgfmathparse{ #1 + sqrt(#1^2+1)}}
\pgfmathdeclarefunction{fncLN}{1}{\pgfmathparse{ln(#1)}}

\begin{document}

\begin{tikzpicture}[>=latex]%,scale=0.75]
\begin{axis}
  \addplot[domain=-5.5:2.5, blue, samples=200,line cap=round,arrows=<->]  {myfncG(x)} node [pos=0.25,above] (g) {};
  \addplot[domain=0.025:5.5, blue, samples=200,line cap=round,arrows=<->] {fncLN(x)} node [pos=0.95,above] (ln) {};
\end{axis}
  \node at ($(g)+(0,2ex)$) {$y=x + \sqrt{x^{2}+1\,}$};
  \node[anchor=east] at ($(ln)+(0,0.5ex)$) {$y=\ln(x)$};
\end{tikzpicture}

\end{document}

生成:

在此处输入图片描述

但在主文档中,我想重新缩放图像。以下是我在主文档中实现此操作的示例:

\documentclass{article}
\usepackage{graphicx}

\begin{document}

This time I'm using \verb=\includegraphics=

\includegraphics[width=2in]{combined}

\end{document}

生成结果:

在此处输入图片描述

但我对字体大小不满意。所以,我想我可以重新缩放这只 需要在第一个 MWE 中进行一处更改standalone

改变

\begin{tikzpicture}[>=latex]%,scale=0.75]

\begin{tikzpicture}[>=latex,scale=0.75]

然后事情就变得不对劲了:

在此处输入图片描述

请注意,不仅我的注释的节点放置不正确,而且轴名称的标签也放置不正确。

我确实有一个解决方法。我可以将以下内容用于我的standalone文档:

\documentclass[border=6pt]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{calc}

\pgfplotsset{every axis/.append style={
    font=\scriptsize,
    x=.75cm*0.75,%% <---- scaling HERE!
    y=.75cm*0.75,%% <---- scaling HERE!
    axis x line=center,
    axis y line=center,
    x axis line style={<->},
    y axis line style={<->},
    xtick={-5,-4,...,5},
    ytick={-5,-4,...,5},
    xlabel={$x$},
    ylabel={$y$},
    xlabel style={below},
    ylabel style={left},
    xmin=-5.5, xmax=5.5,
    ymin=-5.5, ymax=5.5,
    }
}

\pgfmathdeclarefunction{myfncG}{1}{\pgfmathparse{ #1 + sqrt(#1^2+1)}}
\pgfmathdeclarefunction{fncLN}{1}{\pgfmathparse{ln(#1)}}

\begin{document}

\begin{tikzpicture}[>=latex]%%,scale=0.75]
\begin{axis}
  \addplot[domain=-5.5:2.5, blue, samples=200,line cap=round,arrows=<->]  {myfncG(x)} node [pos=0.25,above] (g)  {};
  \addplot[domain=0.025:5.5, blue, samples=200,line cap=round,arrows=<->] {fncLN(x)}  node [pos=0.95,above] (ln) {};
\end{axis}
  \node at ($(g)+(0,2ex)$) {$y=x + \sqrt{x^{2}+1\,}$};
  \node[anchor=east] at ($(ln)+(0,0.5ex)$) {$y=\ln(x)$};
\end{tikzpicture}

\end{document}

导致:

在此处输入图片描述

但看起来这更像是一种技巧,而不是我应该遵循的一般原则。事实上,每次我想要生成坐标和具有给定坐标的节点时,我都必须记住包含比例因子,这可能是一个相当烦人的工作:

\def\aesf{0.75}
\coordinate (A) at (3*\aesf,4*\aesf);

此外,我认为scale不会影响字体大小。根据 TikZ 手册,scale应该将坐标乘以命名的factor

但是在这个最终的 MWE 中,通过改变比例,你也会得到不同比例的标签!(我选择了一个非常小的比例来强调效果。)

\documentclass[border=6pt]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{calc}

\pgfplotsset{every axis/.append style={
    font=\scriptsize,
    x=.75cm,
    y=.75cm,
    axis x line=center,
    axis y line=center,
    x axis line style={<->},
    y axis line style={<->},
    xtick={-5,-4,...,5},
    ytick={-5,-4,...,5},
    xlabel={$x$},
    ylabel={$y$},
    xlabel style={below},
    ylabel style={left},
    xmin=-5.5, xmax=5.5,
    ymin=-5.5, ymax=5.5,
    }
}

\pgfmathdeclarefunction{myfncG}{1}{\pgfmathparse{ #1 + sqrt(#1^2+1)}}
\pgfmathdeclarefunction{fncLN}{1}{\pgfmathparse{ln(#1)}}

\begin{document}

\begin{tikzpicture}[>=latex,scale=0.5]
\begin{axis}
  \addplot[domain=-5.5:2.5, blue, samples=200,line cap=round,arrows=<->]  {myfncG(x)} node [pos=0.25,above] (g) {\normalsize$y=x + \sqrt{x^{2}+1\,}$};
  \addplot[domain=0.025:5.5, blue, samples=200,line cap=round,arrows=<->] {fncLN(x)} node [pos=0.95,above left] (ln) {\normalsize$y=\ln(x)$};
\end{axis}
%  \node at ($(g)+(0,2ex)$) {$y=x + \sqrt{x^{2}+1\,}$};
%  \node[anchor=east] at ($(ln)+(0,0.5ex)$) {$y=\ln(x)$};
\end{tikzpicture}

\end{document}

在此处输入图片描述

有没有更好的方法?我对scale工作原理有什么不理解的地方?

答案1

仅扩展axis环境对我有用:

\begin{axis}[scale=0.75]

在此处输入图片描述

如果您还想使用函数缩放标签节点的距离,则可以在范围内缩放图像的其余部分。这可能没有必要,因为距离取决于字体大小。

\begin{scope}[scale=0.75]
  \node at ($(g)+(0,2ex)$) {$y=x + \sqrt{x^{2}+1\,}$};
  \node[anchor=east] at ($(ln)+(0,0.5ex)$) {$y=\ln(x)$};
\end{scope}

在此处输入图片描述

\documentclass[border=6pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{calc}

\pgfplotsset{every axis/.append style={
    font=\scriptsize,
    x=.75cm,
    y=.75cm,    
    axis x line=center,
    axis y line=center,
    x axis line style={<->},
    y axis line style={<->},
    xtick={-5,-4,...,5},
    ytick={-5,-4,...,5},
    xlabel={$x$},
    ylabel={$y$},
    xlabel style={below},
    ylabel style={left},
    xmin=-5.5, xmax=5.5,
    ymin=-5.5, ymax=5.5,
    }
}

\pgfmathdeclarefunction{myfncG}{1}{\pgfmathparse{ #1 + sqrt(#1^2+1)}}
\pgfmathdeclarefunction{fncLN}{1}{\pgfmathparse{ln(#1)}}

\begin{document}

\begin{tikzpicture}[>=latex]
\begin{axis}[scale=0.75]% scaling the axis environment
  \addplot[domain=-5.5:2.5, blue, samples=200,line cap=round,arrows=<->]  {myfncG(x)} node [pos=0.25,above] (g) {};
  \addplot[domain=0.025:5.5, blue, samples=200,line cap=round,arrows=<->] {fncLN(x)} node [pos=0.95,above] (ln) {};
\end{axis}
\begin{scope}[scale=0.75]
  \node at ($(g)+(0,2ex)$) {$y=x + \sqrt{x^{2}+1\,}$};
  \node[anchor=east] at ($(ln)+(0,0.5ex)$) {$y=\ln(x)$};
\end{scope}
\end{tikzpicture}

\end{document}

x=0.75cm事实上,您已经使用和缩放了图,y=0.75cm当然可以将这些值更改为 0.5625cm。

关键仅在基于 的轴缩放(这是缩放的另一种可能性)、或的显式单位向量计算后/pgfplots/scale重新缩放单位向量x和。但它不会更改文本标签。请注意和之间有区别。ywidthheightplot box Ratioaxis equalxy/pgfplots/scale/tikz/scale

有关更多详细信息,请参阅 pgfplots 手册中的第 4.10 节“缩放选项”。

相关内容