使用 tikz external 时 crossref 文件的自定义名称

使用 tikz external 时 crossref 文件的自定义名称

答案这个问题建议自动将外部化图形的文件名设置为与 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这是一个具有、tikzexternalize的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 文件获得自定义名称,则每个章节都将独立编译。当主文档全部编译在一起时,参考文件就不会发生冲突。

我希望这能澄清这个问题。

相关内容