我知道以前有人问过类似的问题,但解决方案不起作用。我有以下乳胶代码;
\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}