这是我经常遇到的问题,但我没有好的(即可扩展和自动化的)解决方案。
假设我有一个主文档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
\usepackage
macros.tex
\input
这里以获取更多相关信息。