将动态参数传递给独立文件

将动态参数传递给独立文件

我有一堆standaloneTikZ 图像,用于不同的文档。不幸的是,\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 个参数)。

  1. \renewcommand{\tikzParameter}{text}您可以在多个输入调用之间(重新)设置参数并插入\tikzParametertikzfile。

主文本

\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 有两种配置

  1. 您可以在里面定义整个 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}

tikzpicturetikzfile.tex 包含环境中带有新命令和 #1 的问题的所有内容:

tikzfile.tex (精简版)

\newcommand{\tikzpic}[1]{
\begin{tikzpicture}[thick]
    % ...
    % Poles
    \node (poles) at (3,1.5) {#1};
    % ...
\end{tikzpicture}
}

相关内容