tikzscale 包中包含的 tikz/pgfplots 图形的外部化以及 hyperref 交叉引用

tikzscale 包中包含的 tikz/pgfplots 图形的外部化以及 hyperref 交叉引用

正如长标题所说,我想在我的LaTeX项目中包含以下方面。

  • externalTikZ由于平面TikZ和巨大的图形,外部化可能无限的编译时间的库PGFplots
  • \tikzsetnextfilename在每个之前,tikzpicure以避免在改变文档中出现的顺序时重新编译图表;
  • tikzscale允许与提供的输入文件一起使用的\includegraphics包;width.tikz
  • hyperref包装的原因很明显;
  • \ref在正文中tikzpicure引用;\label
  • \ref在正文中引用了某某\label中的某某tikzpicture(特别是引用了某某\addplot);

在检查如何制作hyperrefTikZexternal协同工作之前(我看到已经有很多问答),我想了解以下示例项目存在什么问题。

TikZ我已经阅读了两本手册(和)中的相关部分PGFplots,并且我认为我理解了其中的大部分内容,但也许我错了......

似乎需要使用mode=list and make来处理我的“请求”[它迫使我手动运行 makefile,我讨厌这样做,因为它会使我的速度减慢很多;另一方面,我应该能够,或迟或早,用 单独解决这个问题VimTeX]。

我该怎么做才能得到结果两个图的是编译tex文件,运行.makefile自动生成的,然后重新运行pdflatex。

问题是,当包含这两个图时,我在两个标题中输入的参考资料是错误的。事实上,我看到*crossref*.pdf编号从 3 到 5 的文件与编号从 0 到 2 的文件完全相同。

此外,我还收到有关六个标签中的每一个标签都定义多次的警告。

主文件:

\documentclass{article}

%\usepackage{lipsum}
\usepackage{tikz}
\usepackage{tikzscale}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usetikzlibrary{external, pgfplots.groupplots}
%\usepackage{hyperref}

\tikzexternalize[mode=list and make]

\begin{document}

\section{zero}
\label{sec:zero}
Hello!
\begin{figure}[h]
    \centering
    \tikzsetnextfilename{figura1}
    \includegraphics[width=.5\textwidth]{fig1.tikz}
    \caption{This is stupid figure.\ref{pgf:first} \ref{pgf:second} \ref{pgf:third}}
    \label{fig:fig1}
\end{figure}

\section{First}
\label{sec:first}
Hello!

\begin{figure}[h]
    \centering
    \tikzsetnextfilename{figura2}
    \includegraphics[width=.5\textwidth]{fig2.tikz}
    \caption{This is stupid figure.\ref{pgf:fourth} \ref{pgf:fifth} \ref{pgf:sixth}}
    \label{fig:fig1}
\end{figure}

\end{document}

第一个 TikZ 文件 ( fig1.tikz)

\begin{tikzpicture}
    \begin{groupplot}[group style={group size=2 by 2},height=3cm,width=3cm]
        \nextgroupplot
        \addplot[blue] coordinates {(0,0) (1,1) (2,2)};\addlegendentry{first}
        \label{pgf:first}
        \addplot[red] coordinates {(0,2) (1,1) (2,0)};\addlegendentry{second}
        \label{pgf:second}
        \nextgroupplot
        \addplot[black] coordinates {(0,2) (1,1) (2,0)};\addlegendentry{third, from sec. \ref{sec:first}}
        \label{pgf:third}
        \nextgroupplot
        \addplot[black, mark=*] coordinates {(0,2) (1,1) (2,1)};
        \nextgroupplot
        \addplot[black, mark=*] coordinates {(0,2) (1,1) (1,0)};
    \end{groupplot}
\end{tikzpicture}

第二个 TikZ 文件 ( fig2.tikz)

\begin{tikzpicture}
    \begin{axis}
        \addplot+ coordinates {(0,0) (1,1) (2,2)};\addlegendentry{first}
        \label{pgf:fourth}
        \addplot+ coordinates {(0,2) (1,1) (2,0)};\addlegendentry{second}
        \label{pgf:fifth}
        \addplot+ coordinates {(0,2) (1,1) (2,0)};\addlegendentry{third, from sec. \ref{sec:zero}}
        \label{pgf:sixth}
    \end{axis}
\end{tikzpicture}

答案1

似乎 中的交叉引用无法正常工作\caption。根本原因似乎是\caption排版了两次,但我必须先了解原因,然后才能解决这个问题。

我最终会提交一张票来调查。

您的解决方法是更换

\tikzsetnextfilename{figura2}

经过

\tikzset{external/figure name=figura2_}

区别在于,第一个命令只影响图形本身(在本例中,是图形),fig2.tikz而第二个命令影响全部以下范围内的图形——特别是,它还为交叉引用的微型图片定义了唯一的名称。

该方法的结果是6每个图片都使用 crossref 格式\caption,我不知道为什么或如何抑制它。我猜想环境会因为未知原因(缩放?对齐?)以figure某种方式处理两次。\caption

相关内容