[转]multicols宏包插入图片丢失,怎么办?
原文地址:http://bbs.chinatex.org/forum.php?mod=viewthread&tid=5023&extra=
【问题描述】
貌似multicols环境中不能放图片,即
\begin{multicols}{2}
\begin{figure}
\centering
\includegraphics[width=0.309\textwidth]{fig0001.eps}
\caption{图} \label{fig:1}
\end{figure}
\end{multicols} 是不允许的,图片丢失,可是如把图片放在multicols环境外图片就是单栏的了,是不是这样?
解释说明:Package multicol Warning: Floats and marginpars not allowed inside `multicols'
environment!.
就是说multicols环境里,是不允许浮动环境存在的。
【解决方案】
方案一、参见ctex-faQ,59个问题。摘录如下:
如果你使用的是LATEX 标准文档类的twocolumn 模式,那么使用figure 和table 环境可以产生单列的
浮动图形或者表格,而使用figure* 和table* 环境则可以产生通栏的浮动图形或者表格。
如果你使用的是multicol 宏包提供的multicols 环境,那么就有一点小问题了。figure 和table 在这种方式下无法正常工作,会导致图形或者表格丢失。但是, figure* 和table* 仍然可以正常工作,产生通栏的浮动图形或者表格,就像在标准文档类的twocolumn 模式下一样。
要在multicols 环境中使用单栏的图形或者表格,可以使用float 宏包提供的[H] 位置选项。例如
\begin{figure}[H]
...
\caption{...}
\end{figure}
但是要注意的是,这种方式产生的对象是不能“浮动”的,也就是说位置是固定的。因此,有时候你必须仔细调整它的位置,以免造成分栏的底部参差不齐。
注:亲测,该方法无效,不晓得是否与版本有关
方案二、在双栏环境下,我们可以不使用figure。可以直接插入图片,居中的话可以用center环境。若是想使用caption和label,导言区 加入代码:
\makeatletter \def\@captype{figure} \makeatother \caption{???}\label{xxx}
这样会让图和表格的标题都以figure ,若是table也正常的话。每次使用前修改为\makeatletter
1 \def\@captype{table} 2 \makeatother 3 或者重新定义为: 4 \makeatletter 5 \newcommand\figurecaption{\def\@captype{figure}\caption} 6 \newcommand\tablecaption{\def\@captype{table}\caption} 7 \makeatother 8 然后用\figurecaption{XXX}和\tablecaption{XXX}来加标题吧!
方案三、定义新的环境来使用。
1 \makeatletter 2 \newenvironment{tablehere} 3 {\def\@captype{table}} 4 {} 5 6 7 \newenvironment{figurehere} 8 {\def\@captype{figure}} 9 {} 10 \makeatother
我们直接使用 figurehere 和 tablehere环境就可以了。
个人觉得方案二最方便