在主文件和独立文件中使用用户命令重用外部文件

在主文件和独立文件中使用用户命令重用外部文件

这是我经常遇到的问题,但我没有好的(即可扩展和自动化的)解决方案。

假设我有一个主文档MWE.tex、一个带有自定义命令的宏文件macros.tex和一个带有 Tikz 图形的独立文件tikz_external.tex。其中macros.tex有一些命令我想在主文档和外部独立文件中使用。此外,Tikz 图形需要一些额外的 tikz 库。示例如下所示。

% MWE.tex
\documentclass{article}

\usepackage{tikz}
\usepackage[subpreambles]{standalone}

\input{macros}

\begin{document}

\includestandalone[width=0.75\linewidth]{tikz_external} 

\end{document}

% macros.tex
\newcommand{\foo}{FOO} 

% tikz_external.tex
\documentclass[tikz]{standalone}

\usetikzlibrary{arrows.meta} % needed for Latex arrowhead style
\input{macros}

\begin{document}

\begin{tikzpicture}
    \draw[->,>=Latex] (0,0) -- node[above] {\foo} (1,0);        
\end{tikzpicture}

\end{document}

现在在主文件(MWE.tex)中编译失败,并给出错误:

Command \foo already defined. \newcommand{\foo}{FOO}

但是,如果我删除该subpreambles选项,MWE.tex则会收到以下错误:

Package pgf Error: Unknown arrow tip kind 'Latex'. \draw[->,>=Latex]

为了解决这个问题,我可以将 Tikz 库包含arrows.meta进去MWE.tex

但是,我不喜欢这样,因为 nowMWE.tex依赖于 的内部结构tikz_external.tikz,你可以想象有数百个外部 Tikz 文件,需要不同数量的 Tikz 库。为了编译,MWE.tex必须导入所有这些库。

我猜第三个选项可能是将外部 Tikz 图形作为 PDF 包含在主文档中。但每次我对外部 Tikz 文件进行更改时,我都必须重新编译它们,这就失去了在主文件内构建所有内容的好处。

我的问题:我该如何正确地做到这一点?也就是说,理想情况下,我希望能够单独编译外部 Tikz 图形,这样我就可以根据需要单独处理它们。但我还希望能够编译整个文档,而不必重新编译外部文件。而且我不想将所有 Tikz 库依赖项导入主文件。这可能吗?

答案1

\providecommand您可以使用而不是 来声明您的宏,\newcommand如果相应的宏已经创建,它将不执行任何操作。

如果你遇到了已加载包的冲突(例如,无论出于何种原因,你都会将它们加载到macros.tex和 中),你可以使用而不是并创建一个包而不是通过 包含的文件。请参阅MWE.tex\RequirePackage\usepackagemacros.tex\input这里以获取更多相关信息。

相关内容