![缩放 tikzpicture 时,TikZ“缩放”键根本没有按照预期的方式运行](https://linux22.com/image/291756/%E7%BC%A9%E6%94%BE%20tikzpicture%20%E6%97%B6%EF%BC%8CTikZ%E2%80%9C%E7%BC%A9%E6%94%BE%E2%80%9D%E9%94%AE%E6%A0%B9%E6%9C%AC%E6%B2%A1%E6%9C%89%E6%8C%89%E7%85%A7%E9%A2%84%E6%9C%9F%E7%9A%84%E6%96%B9%E5%BC%8F%E8%BF%90%E8%A1%8C.png)
我在 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
和。但它不会更改文本标签。请注意和之间有区别。y
width
height
plot box Ratio
axis equal
x
y
/pgfplots/scale
/tikz/scale
有关更多详细信息,请参阅 pgfplots 手册中的第 4.10 节“缩放选项”。