latex 认为引用未定义

latex 认为引用未定义

我知道以前有人问过类似的问题,但解决方案不起作用。我有以下乳胶代码;

\documentclass[a4paper,10pt]{report}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{enumerate}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
blahblah in figure\ref{diagram1}.

\begin{figure}[H]
\centering
\includegraphics[width=1\textwidth]{images/diagram.png}
\caption{blahblahblah }
\label{diagram1}
\end{figure}

\end{multicols}

\end{document}

我收到以下错误信息;

Reference `diagram1' on page 2 undefined

无论我尝试使用 pdf latex 重新编译该文档多少次,我都会遇到同样的错误。

这里有没有人遇到过这种情况?乳胶显然是错误的,但你不明白原因是什么?

答案1

LaTeX 已经告诉你原因了:

Package multicol Warning: Floats and marginpars not allowed inside `multicols' environment!.

整个 float 对象(包括 )都消失了\label。因此引用未定义。

还不H支持会导致错误,可以通过添加包来修复float。如果您不想要浮动对象,还有其他方法可以添加标题,请参见以下示例。

此外,如果有两列,那么就没有地方放置宽度为整个的图像\textwidth\linewidth这样更好,因为它反映了当前的线宽。

\documentclass[a4paper,10pt]{report}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[demo]{graphicx}
\usepackage{caption}
\usepackage{enumerate}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
blahblah in figure\ref{diagram1}.

\noindent
\begin{minipage}{\linewidth}
  \centering
  \includegraphics[width=\linewidth]{images/diagram.png}
  \captionof{figure}{blahblahblah }
  \label{diagram1}
\end{minipage}

\end{multicols}
\end{document}

结果

如果要让图形横跨整个文本宽度,那么figure*可以figure使用,但只能作为不带的浮动对象H

\documentclass[a4paper,10pt]{report}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[demo]{graphicx}
\usepackage{enumerate}
\usepackage{multicol}
\begin{document}
\begin{multicols}{2}
blahblah in figure\ref{diagram1}.

\begin{figure*}
\includegraphics[width=\linewidth]{images/diagram.png}
\caption{blahblahblah }
\label{diagram1}
\end{figure*}

\end{multicols}
\end{document}

相关内容