答案这个问题建议自动将外部化图形的文件名设置为与 tikz 的文件名相同,可以使用以下命令:
\newcommand{\includetikz}[1]{%
\tikzsetnextfilename{#1}%
\input{#1.tikz}%
}
如果在 tikzpicture 环境中有一个 \label,那么它会被外部化,以及 .dpth、.nlo、.md5、.log、.pdf 文件,其名称类似于:“main-figure_crossref0”、“main-figure_crossref1”、“main-figure_crossref2”等,数量不断增加(假设您的文档名称是 main)。
有没有办法可以改变这些 crossref 文件的名称,使其与 tikz 文件的名称相对应?
因此,对于名为“PlotOfTwoCircles.tikz”(带有 2 个 \label)、“PlotOfASquare.tikz”(带有 1 个 \label)和“PlotOfATriangle.tikz”(带有 1 个 \label)的三个图形,并输入到名为“main.tex”的文档中,参考文件将如下所示:“main-PlotOfTwoCircles_crossref0”、“main-PlotOfTwoCircles_crossref1”、“main-PlotOfASquare_crossref0”、“main-PlotOfATriangle_crossref0”等。
我假设这将允许人们使用 includeonly 命令,因为 crossref 文件不依赖于它们在文档中出现的顺序。
编辑
pgfplots
这是一个具有、tikz
和externalize
的MWE include
,因为上述问题不清楚。
我的main.tex
文件
\documentclass{report}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{external}
\usepackage{lipsum}
\tikzexternalize
\newcommand{\includetikz}[2]{%
\tikzsetnextfilename{\tikzexternalrealjob-#1#2}%
\input{./#1/img/#2.tikz}%
}
\includeonly{ch1/ch1} % <-- This I change depending on the chapter I want to compile
\begin{document}
\include{ch1/ch1}
\include{ch2/ch2}
\end{document}
目录树:
thesis
│ main.tex
│
└───ch1
│ │ ch1.tex
│ │
│ └───img
│ │ fig_with_xy.tikz
│ │ ...
│
└───ch2
| │ ch2.tex
│ │
│ └───img
│ │ fig_with_xy3.tikz
│ │ ...
文件tikz
:
\begin{filecontents}{./ch1/img/fig_with_xy.tikz}
\begin{tikzpicture}
\begin{axis}[%
width=5cm,
height=2cm,
at={(0,0)},
scale only axis,
xmin=0.0,
xmax=1.0,
xlabel style={font=\color{white!15!black}},
xlabel={$x$},
ymin=0.0,
ymax=2.0,
ylabel style={font=\color{white!15!black}},
ylabel={$y$},
axis background/.style={fill=white},
xmajorgrids,
ymajorgrids
]
\addplot [color=black, forget plot]
table[row sep=crcr]{%
0 0\\
1 1\\
};
\label{line:xy}
\addplot [color=red, forget plot]
table[row sep=crcr]{%
0 0\\
1 2\\
};
\label{line:xy2}
\end{axis}
\end{tikzpicture}%
\end{filecontents}
\begin{filecontents}{./ch2/img/fig_with_xy_3.tikz}
\begin{tikzpicture}
\begin{axis}[%
width=5cm,
height=2cm,
at={(0,0)},
scale only axis,
xmin=0.0,
xmax=1.0,
xlabel style={font=\color{white!15!black}},
xlabel={$x$},
ymin=0.0,
ymax=3.0,
ylabel style={font=\color{white!15!black}},
ylabel={$y$},
axis background/.style={fill=white},
xmajorgrids,
ymajorgrids
]
\addplot [color=black, dashed, forget plot]
table[row sep=crcr]{%
0 0\\
1 1\\
};
\label{line:xydash}
\addplot [color=blue, forget plot]
table[row sep=crcr]{%
0 0\\
1 3\\
};
\label{line:xy3}
\end{axis}
\end{tikzpicture}%
\end{filecontents}
章节
\begin{filecontents}{./ch1/ch1.tex}
\chapter{Introduction}
\lipsum
\begin{figure}
\includetikz{ch1}{fig_with_xy}
\caption{Line of $y=x$ (\ref{line:xy}) and line of $y=2x$ (\ref{line:xy2}).}
\end{figure}
\end{filecontents}
\begin{filecontents}{./ch2/ch2.tex}
\chapter{Background}
\lipsum
\begin{figure}
\includetikz{ch2}{fig_with_xy_3}
\caption{Line of $y=x$ (\ref{line:xydash}) and line of $y=3x$ (\ref{line:xy3}).}
\end{figure}
\end{filecontents}
运行pdflatex -shell-escape -synctex=1 -interaction=nonstopmode "main".tex
两次,使用\includeonly{ch1\ch1}
或\includeonly{ch2\ch2}
生成所需的 pdf,假设不main-figure_crossref*
存在任何文件。但是,如果它们确实存在,则对行的引用将是错误的,因为所有 crossref 文件都是增量命名的。如果\includeonly{}
注释掉该行,情况也是如此。通过允许 crossref 文件获得自定义名称,则每个章节都将独立编译。当主文档全部编译在一起时,参考文件就不会发生冲突。
我希望这能澄清这个问题。