我有一堆standalone
TikZ 图像,用于不同的文档。不幸的是,\node
这些图像中的 s 会从一个文档变为另一个文档。当然,每次我重复使用文件时,我都可以简单地创建一个副本,并\node
相应地更改每个副本中的文本。但如果我决定稍后更改某些内容,那就会变得很麻烦。我必须手动将更改应用于所有副本。
我想知道是否有更优雅的方法。是否可以将参数传递给文件standalone
(例如 via \input
)以动态更新标签?
例如,考虑以下代码生成的图像。我该如何将当前保存的节点中的文本poles of h(p0)
从一个更改\input
为下一个?
\documentclass[svgnames]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds,decorations.markings,positioning}
\begin{document}
\begin{tikzpicture}[thick]
\def\xr{4}\def\yr{4}
% Axes
\draw [->] (-\xr-1,0) -- (\xr+1,0) node [above left] {$\Re(p_0)$};
\draw [->] (0,-\yr-0.7) -- (0,\yr+0.7) coordinate [below left = 0.3 and 0.1] (y-axis);
\node (y-label) at ([xshift=-50]y-axis) {$\Im(p_0)$};
\draw[ultra thin,gray] (y-axis) -- (y-label);
% Matsubara frequencies
\foreach \n in {-\yr,...,-1,1,2,...,\yr}{%
\draw[fill] (0,\n) circle (1pt) node [right] {$i \omega_{_{\n}}$};}
\draw[fill] (0,0) circle (1pt) node [above right] {0};
% Contour line
\draw[DarkBlue,decoration={markings,mark=between positions 0 and 1 step 0.28 with \arrow{>}},postaction={decorate}] (1,-\yr) -- (1,\yr) node [below right] {$C$} arc (0:180:1) (-1,\yr) -- (-1,-\yr) arc (180:360:1);
% Poles
\node (poles) at (3,1.5) {poles of $h(p_0)$};
\draw[fill]
(2.5,3) coordinate [circle,fill,inner sep=1pt,label=left:$p_1$] (p1)
(2,-2) coordinate [circle,fill,inner sep=1pt,label=below:$p_2$] (p2)
(-3,2) coordinate [circle,fill,inner sep=1pt,label=above:$p_3$] (p3)
(-2.5,-2.5) coordinate [circle,fill,inner sep=1pt,label=above:$p_4$] (p4);
\begin{scope}[on background layer]
\draw[ultra thin,gray]
(poles) -- (p1)
(poles) -- (p2)
(poles.west) -- (p3)
(poles) -- (p4);
\end{scope}
\end{tikzpicture}
\end{document}
答案1
我能想到两种可能的解决方案。
对于较多参数,我建议采用解决方案 1,而对于较少参数,我建议采用解决方案 2,因为它们必须按照正确的顺序传递(限制为 9 个参数)。
\renewcommand{\tikzParameter}{text}
您可以在多个输入调用之间(重新)设置参数并插入\tikzParameter
tikzfile。
主文本
\documentclass[svgnames]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds,decorations.markings,positioning}
\begin{document}
\newcommand{\tikzParameter}{poles of $h(p_0)$}
\input{tikzfile}
\renewcommand{\tikzParameter}{Another Text}
\input{tikzfile}
\end{document}
tikzfile.tex 包含环境中问题的所有内容,并在正确的位置tikzpicture
附加了内容:\tikzParameter
tikzfile.tex (简短版本):
\begin{tikzpicture}[thick]
% ...
% Poles
\node (poles) at (3,1.5) {\tikzParameter};
% ...
\end{tikzpicture}
- 您可以在里面定义整个 tikzpicture
\newcommand{\tikzpic}[<number of parameters>]{...}
并插入 #1 ... #9 作为参数。
主文本
\documentclass[svgnames]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds,decorations.markings,positioning}
\input{tikzfile}
\begin{document}
\tikzpic{poles}
\tikzpic{Another Text}
\end{document}
tikzpicture
tikzfile.tex 包含环境中带有新命令和 #1 的问题的所有内容:
tikzfile.tex (精简版)
\newcommand{\tikzpic}[1]{
\begin{tikzpicture}[thick]
% ...
% Poles
\node (poles) at (3,1.5) {#1};
% ...
\end{tikzpicture}
}