正如长标题所说,我想在我的LaTeX
项目中包含以下方面。
external
TikZ
由于平面TikZ
和巨大的图形,外部化可能无限的编译时间的库PGFplots
;\tikzsetnextfilename
在每个之前,tikzpicure
以避免在改变文档中出现的顺序时重新编译图表;tikzscale
允许与提供的输入文件一起使用的\includegraphics
包;width
.tikz
hyperref
包装的原因很明显;\ref
在正文中tikzpicure
引用;\label
\ref
在正文中引用了某某\label
中的某某tikzpicture
(特别是引用了某某\addplot
);
在检查如何制作hyperref
和TikZexternal
协同工作之前(我看到已经有很多问答),我想了解以下示例项目存在什么问题。
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