如何禁用 \includestandalone 的分组

如何禁用 \includestandalone 的分组

我根据以下重新定义实部和虚部的默认宏

\let\Re\relax
\DeclareMathOperator{\Re}{Re}
\let\Im\relax
\DeclareMathOperator{\Im}{Im}

除了主文档之外,我还希望将这些更改应用于一堆外部 TikZ 图像,这些图像包含在standalone包的\includestandalone.standalone已加载选项

\usepackage[subpreambles=true,mode=buildnew]{standalone}

在第 23 页包装文档, 它说

group=true|false此选项默认设置为“true”,用于控制是否在独立文件的内容周围添加组。通常(“true”)子文件的文档环境将变为除了添加通常的组之外不执行任何操作的环境。如果设置为“false”,则此环境将变得透明,因此不会添加任何组。宏之后,子文件文档主体内的任何定义仍可访问\input。请注意,这不会影响 \includestandalone始终会添加组的宏。

如何防止\includestandalone添加组以便将我的自定义\Re\Im宏传递到我的 TikZ 图像?

更新

为了回应 Martin Scharrer 的评论,我添加了一个 MWE。请注意和的重新定义\Re以及出现在独立文件内部的\Im宏,它替换了 TikZ 图像的一部分,以供该文件的特定用途使用。\poles

主文件

\documentclass{scrartcl}

\usepackage[subpreambles=true,mode=buildnew]{standalone}
\usepackage{mathtools}

\DeclareMathOperator{\Tr}{Tr}
\let\Re\relax
\DeclareMathOperator{\Re}{Re}
\let\Im\relax

\begin{document}

\ifdefined\poles\renewcommand{\poles}{
    \node (poles) at (3,1.5) {poles of $\smash{\frac{1}{-p_0^2 + x^2}}$};
    \draw[fill]
    (2,3) coordinate [circle,fill,inner sep=1pt,label=right:$p_1$] (p1)
    (-2,-3) coordinate [circle,fill,inner sep=1pt,label=below:$p_2$] (p2);
    \begin{scope}[on background layer]
        \draw[ultra thin,gray]
        (poles) -- (p1)
        (poles) -- (p2);
    \end{scope}
}\else\fi

\begin{figure}[htbp!]
    \centering
    \includestandalone{"Contour 1"}
    \caption{Counterclockwise path $C$ enclosing the imaginary frequency axis but excluding poles of $\frac{1}{-p_0^2 + x^2}$}
    \label{fig:contour 1}
\end{figure}

\end{document}

独立文件(名为“Contour 1.tex”)

\documentclass[svgnames]{standalone}

\usepackage{tikz}
\usetikzlibrary{backgrounds,decorations.markings,positioning}

\providecommand{\poles}{
    \node (poles) at (3,1.5) {poles of $h(p_0)$};
    \draw[fill]
    (2.5,3) coordinate [circle,fill,inner sep=1pt,label=right:$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}
}

\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
    \poles

\end{tikzpicture}
\end{document}

答案1

嗯,\includestandalone是仿照的:它要么使用第二个内部 LaTeX 调用\includegraphics构建给定的子文件(例如使用包选项),然后使用将生成的 PDF 作为图像包含,要么它包含给定文件中的 LaTeX 代码,同时假设代码绘制图表或其他块内容。后者实际上也是使用not (!) 完成的,因为加载了我的另一个包,它为添加了驱动程序。该“驱动程序”简单地将 TeX 内容添加为一个框并 - 在一个组内。这样,所有选项(如或等)都可以直接应用于子文件!mode=buildnew\includegraphics\includegraphics\inputstandalonegincltex.tex\includegraphics\includegraphicswidthscale

由于我无法删除装箱或分组以保持与预期功能集的兼容性,因此我无能为力。请注意,mode=buildnew子文件的代码无论如何都是单独编译的,因此主文件永远不会看到那里的代码!

相关内容