我有一个独立standalone_tikzpicture.tex
文件,
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,shapes,arrows,positioning,calc}
\begin{document}
\begin{tikzpicture}[
sum/.style= {draw, circle},
input/.style = {coordinate},
output/.style= {coordinate},
>=Stealth,
]
\node [input, name=input1] (input1) {};
\node [sum, right of=input1, name=sum1] (sum1) {$ + $};
\node [output, right of=sum1, name=output1] (output1) {};
\draw [->] node [left] {$\textbf{A}$} (input1) -- (sum1);
\draw [->] (sum1) -- (output1) node [right] {B};
\end{tikzpicture}
\end{document}
我想在另一个文件中main.tex
以不同的比例显示它。我的main.tex
文件是:
\documentclass{article}
\usepackage{tikz}
\usepackage{standalone}
\usetikzlibrary{arrows.meta,shapes,arrows,positioning,calc}
\begin{document}
\foreach \i in {0.5,1,...,4}{
\begin{figure}\label{fig:\i}
\tikzset{every picture/.style={scale=\i,every picture/.style={}}}
\centering
\includestandalone{standalone_tikzpicture}
\caption{Figure size \i.}
\end{figure}
}
\end{document}
问题是,输出的独立图片没有缩放main.tex
。获得相同大小的图形。我唯一能缩放的方法是替换行
\includestandalone{standalone_tikzpicture}
和
\includestandalone[scale = \i]{standalone_tikzpicture}
但这也会导致文本缩放,这绝对不是我们想要的。我读过包含独立 tikz 文件并在不缩放节点的情况下缩放它的最佳方式,其中的解决方案对我来说不起作用。有没有办法保持字体大小不变,只缩放图片?
编辑1(错过添加要求):
\foreach
这里仅用于模拟同一张图片的多个实例。要求是在不同的地方使用同一张图片。因此standalone_file
是必需的。
答案1
下面缩放inner sep
以使圆圈变大,并直接指定间隔距离。我不确定间隔距离left of
用什么,但它不是inner sep
或outer sep
。
我没有尝试使用standalone
。那是另一个问题。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\foreach \i in {0.5,1,...,4}{%
\begin{figure}
\centering
\begin{tikzpicture}[
every node/.style={inner sep={\i*.333em}},
sum/.style= {draw, circle},
>=Stealth,
]
\node [sum] (sum1) {$ + $};
\node [right={\i*1em}] (output1) at (sum1.east) {B};
\node [left={\i*1em}] (input1) at (sum1.west) {$\textbf{A}$};
\draw [->] (input1) -- (sum1);
\draw [->] (sum1) -- (output1);
\end{tikzpicture}
\caption{Inner sep scale = \i, separation distance = \i em.}
\end{figure}
}
\end{document}
答案2
我找到了三种方法来解决这个问题。这些解决方案都保留了单独独立文件的要求。
如何使用每个解决方案的文件:
主文件:阅读所有注释以
main.tex
打开和关闭每个解决方案的相应行。此文件是所有解决方案的必需文件。对于解决方案 1 和解决方案 2:阅读所有注释以
standalone_tikzpicture12.tex
打开和关闭解决方案 1 和解决方案 2 的适当行。对于解决方案 3:请使用
standalone_tikzpicture3.tex
。
每个解决方案的详细信息:
解决方案 1:
\tikzset{every picture/.style={scale=\i, every picture/.style={}}}
可用于main.tex
仅根据参数缩放形状\i
,而不将变量明确发送到独立文件standalone_tikzpicture12.tex
。解决方案 2:从
main.tex
将参数\i
明确发送到独立文件standalone_tikzpicture12.tex
并使用\draw[scale=\i]
选项缩放每个形状。在 中standalone_tikzpicture12.tex
,所有形状都以绝对比例绘制。创建节点只是为了添加文本,而周围没有任何形状。这在解决方案 1 和 2 中很常见。这对于更复杂的图形来说具有挑战性。这两种方法都是在我从 @JohnKormylo 那里了解到节点的大小适合内部内容后发展起来的。在解决方案 3 中,创建的独立文件
standalone_tikzpicture3.tex
与问题中发布的文件没有太大区别,但有一些变化。参数\i
被明确发送到独立文件,并且使用tikzpicture
在文件中对整体进行缩放。在文件中,所有节点都根据所需大小创建具有参数的形状,例如节点距离、最小尺寸、圆等,内部不包含任何文本。对于每个文本,都会使用参数创建节点,这就是区别所在。这会使中的缩放效果无效。按 缩放所有内容,然后再次按 缩放仅文本以取消缩放。这里也可以明确使用任何其他变量来调整仅文本的比例。main.tex
\includestandalone[scale=\i]{standalone_picture3}
standalone_tikzpicture3.tex
[scale=1/\i]
[scale=\i]
main.tex
\i
1/\i
代码(默认启用解决方案 3):
main.tex
(所有解决方案都需要):
\documentclass{article}
\usepackage{tikz}
\usepackage{standalone}
\usepackage{tikzscale}
\usetikzlibrary{arrows.meta,shapes,arrows,positioning,calc}
\begin{document}
\foreach \i in {1,2,...,4}{
\begin{figure}\label{fig:\i}
\centering
% \def\i{<MyScaleValue>} % assign a value to \i in General cases when not using \foreach to set \i
% Enable below 1 line for method 1, Disable for method 2 and 3
% \tikzset{every picture/.style={scale=\i, every picture/.style={}}} % Method 1
% Enable below 1 line for method 1 and 2, Disable for method 3
% \includestandalone{standalone_picture12} % This is for method 1 and 2
% Enable below line for method 3, Disable for method 1 and 2
\includestandalone[scale=\i]{standalone_picture3} % This is for method 3
\caption{Figure size \i.}
\end{figure}
}
\end{document}
standalone_picture12.tex
(解决方案 1 和 2 的独立文件):
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
>=Stealth,
]
% Enable below 1 line for method 1, Disable for method 2
\def\i{1} % Method 1
\def\ii{0.25*\i}
\def\ij{3}
\draw [domain=0:360, scale = \ii] plot ({cos(\x)}, {sin(\x)});
\draw [->] (-\ii*\ij,0) -- (-\ii,0);
\draw [->] (\ii,0) -- (\ii*\ij,0);
\draw [line width = \ii] (-\ii*.75,0) -- (\ii*.75,0);
\draw [line width = \ii] (0,-\ii*.75) -- (0,\ii*.75);
\node [anchor=east] at (-\ii*\ij,0) {$ \textbf{A} $};
\node [anchor=west] at (\ii*\ij,0) {$ \textbf{B} $};
\end{tikzpicture}
\end{document}
standalone_picture3.tex
(解决方案 3 的独立文件):
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
node distance = 10mm and 10mm,
sum/.style= {draw, circle, minimum size=6mm, inner sep=0pt, outer sep=0pt,},
input/.style = {coordinate},
output/.style= {coordinate},
>=Stealth,
]
% \def\i{1} % to test standalone
\def\j{1} % to test standalone
\node [input,] (input1) {};
\node [sum, right=of input1,scale=\j] (sum1) {$ + $};
\node [output, right=of sum1,scale=\j] (output1) {};
\draw [->,scale=\j] (input1) -- (sum1);
\node [anchor=east,scale=1/\i] at (input1) (A) {$\textbf{A}$};
\draw [->,scale=\j] (sum1) -- (output1);
\node [anchor = west,scale=1/\i] at (output1) (B) {$ \textbf{B} $};
\end{tikzpicture}
\end{document}