[转]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环境就可以了。

 

 

个人觉得方案二最方便

posted @ 2015-05-08 23:19  dupuleng  阅读(1095)  评论(1编辑  收藏  举报