Latex 中的子标题和交叉引用问题

Latex 中的子标题和交叉引用问题

所以我一直在用 Latex 写我的论文,最近我偶然发现了一个难以解决的问题,我希望这里有人可以帮助我。

我正在使用 subcaption 创建多图像图形。我成功地交叉引用了一组图像,但第二组图像出现了问题。代码完全相同,只是其中一个出现了错误。我附上了我的代码,显示了某些引用如何显示为“??”。

\documentclass{book}
\usepackage{typedref}
\usepackage[demo]{graphicx}
\usepackage{caption,subcaption}
\usepackage{listings}

\begin{document}

Test \figureref{protonTimeComparison}.

\begin{figure}
\begin{center}
    \begin{subfigure}[b]{1\textwidth}
        \graphicspath{{./Figures/}}
        \includegraphics[width=1\linewidth]{cheers.png}
        \subcaption{Test 1a}
        \label{proton5min}
    \end{subfigure}
    \begin{subfigure}[b]{1\textwidth}
        \graphicspath{{./Figures/}}
        \includegraphics[width=1\linewidth]{Thirty_Minute_Average_Flux_Jan2000.png}
        \subcaption{test 1b}
        \label{protonthreemin}
    \end{subfigure}
    \caption{test 1}
    \label{protonTimeComparison}
\end{center}
\end{figure}

Test sublabels \figureref{proton5min} and \figureref{protonthreemin}.

Test \figureref{protonP1Issue}

\begin{figure}
\begin{center}
    \begin{subfigure}[b]{1\textwidth}
        \graphicspath{{./Figures/}}
        \includegraphics[width=1\linewidth]{April_2002_Channel_P1.png}
        \subcaption{test 2a}
        \label{P1Apr}
    \end{subfigure}
    \begin{subfigure}[b]{1\textwidth}
        \graphicspath{{./Figures/}}
        \includegraphics[width=1\linewidth]{April_2002_Channel_P2.png}
        \subcaption{test 2b}
        \label{PApr}
    \end{subfigure}
    \caption{test 2}
    \label{protonP1Issue}
\end{center}
\end{figure}

Test sublabels \figureref{P1Apr} and \figureref{PApr}.

\end{document}

我认为这可能与类型引用我用于交叉引用的包,但我不确定。谢谢你的帮助。

答案1

我认为没有必要使用诸如类型引用—— 它似乎是与 MikTeX 一起发布的,但是不是使用 TeXlive——如果有一个更强大、更通用的交叉引用包,例如聪明人可以代替使用。

哦,请[b]subfigure环境中省略位置说明符,因为它们什么都不做(除了提供代码混乱)。

enter image description here

\documentclass{book}
%%\usepackage{typedref} % not part of TeXLive
\usepackage[demo]{graphicx}
\usepackage{subcaption,listings}
\usepackage[noabbrev,capitalize]{cleveref}

\begin{document}
Test: \cref{protonTimeComparison}.

Test: \cref{proton5min} and \cref{protonthreemin}. 
Or: \cref{proton5min,protonthreemin}.

\begin{figure}
    \begin{subfigure}{1\textwidth}
        \graphicspath{{./Figures/}}
        \includegraphics[width=1\linewidth]{cheers.png}
        \caption{Test 1a}
        \label{proton5min}
    \end{subfigure}

    \medskip % insert some vertical whitespace to separate the subfigures
    \begin{subfigure}{1\textwidth}
        \graphicspath{{./Figures/}}
        \includegraphics[width=1\linewidth]{Thirty_Minute_Average_Flux_Jan2000.png}
        \caption{Test 1b}
        \label{protonthreemin}
    \end{subfigure}
    \caption{Test 1}
    \label{protonTimeComparison}
\end{figure}
\end{document}

答案2

尝试对你的 MWE 进行以下修改:

\documentclass{book}
%\usepackage{typedref}  % source of the problem
\usepackage[demo]{graphicx}
\usepackage{caption,subcaption}
%\usepackage{listings}

        \graphicspath{{./Figures/}}

\begin{document}

Test \ref{protonTimeComparison}.

\begin{figure}
\centering
    \begin{subfigure}{\textwidth}
        \includegraphics[width=\linewidth]{cheers}
        \caption{Test 1a}
        \label{proton5min}
    \end{subfigure}
    \begin{subfigure}{\textwidth}
        \includegraphics[width=\linewidth]{Thirty_Minute_Average_Flux_Jan2000}
        \caption{test 1b}
        \label{protonthreemin}
    \end{subfigure}
\caption{test 1}
    \label{protonTimeComparison}
\end{figure}

Test sub-labels \ref{proton5min} and \ref{protonthreemin}.
Test \ref{protonP1Issue}

\begin{figure}
\centering
    \begin{subfigure}{\textwidth}
        \includegraphics[width=\linewidth]{April_2002_Channel_P1.png}
        \caption{test 2a}
        \label{P1Apr}
    \end{subfigure}\hfil
    \begin{subfigure}{\textwidth}
        \includegraphics[width=\linewidth]{April_2002_Channel_P2.png}
        \caption{test 2b}
        \label{PApr}
    \end{subfigure}
\caption{test 2}
    \label{protonP1Issue}
\end{figure}
Test sub-labels \ref{P1Apr} and \ref{PApr}.
\end{document}

与您的 MWE 相比,主要变化如下:

  • 图像路径被移动到序言中它们的位置在哪里(如果你的所有图像都在同一个文件夹中)
  • 用来subfigure代替\captionsubcaption
  • 您已\figureref按包定义typedref。由于发现后者与不兼容,subcaption因此最好将其自身定义figureref\newcommand\figureref[1]{Fig. \ref{#1}}或使用其他包进行引用。

enter image description here

附录: 问题的根源是包typedref,它大量重新定义了labeldefinition。如果没有它,上述示例可以正常工作(如报告所示)。有关更好的解决方案,请参阅米科答案,他提出并展示了如何使用cleaveref包。

相关内容