我有一篇双栏文章,仍在进行中。在这篇文章中,我必须不时添加一些图片,这些图片往往比单栏宽一点,但跨度要小一些。
我通常通过手动将图形移动到左侧\hspace*{-2cm}
或(有时)通过移动到右侧来调整图形\hspace*{2cm}
,具体取决于图形是在左列还是右列。
由于本文仍在进行中,我有时会在图片上方添加文字,而文字可能会改变图片的当前位置,从右列移到左列,反之亦然。然后,图片会覆盖文字,请将示例与下面的模拟图片进行比较(请注意代码中的注释)。
每次我在图形上方添加文本时,如何才能LaTeX
让图形自动移动,而无需手动向左或向右调整图形?
\documentclass[a4paper]{article}
\usepackage{multicol}
\usepackage{lipsum}
\usepackage{tikz}
\usepackage{float}
\begin{document}
\begin{multicols}{1}
\lipsum[1-3]
\begin{figure}[H]
\centering
\begin{tikzpicture} % this is how the mock figure does not suppose to be appear in the article
\hspace*{-2cm}\draw circle (2); % hspace here only simulates a wide graph or image (I was otherwise not able to add a picture here)
\end{tikzpicture}
\caption{Figure in two column}
\end{figure}
\lipsum[3-4]
\begin{figure}[H]
\centering
\begin{tikzpicture} % this is how the mock figure suppose to appear in the article
\hspace*{-2cm}\draw circle (2); % hspace only simulates a wide graph or image (see comment above)
\end{tikzpicture}
\caption{Figure in two column}
\end{figure}
\lipsum[5-6]
\end{multicols}
\end{document}
答案1
如果您阅读了 multicol 的文档(例如,通过运行texdoc multicol
),您将看到自 1.8 版本以来,multicol 支持\docolaction
您正在寻找的内容:根据您最终所在的列执行不同的操作。
\documentclass[a4paper]{article}
\usepackage[colaction]{multicol} % <--- add option
\usepackage{lipsum}
\usepackage{tikz}
\usepackage{float}
\newcommand{\Wfigure}[2]
{\begin{figure}[H]
\docolaction %<--- select what to do
{\makebox[\columnwidth][r]{#1}}
{\ERRORmiddle} % fail in middlecolumn (lazy)
{\makebox[\columnwidth][l]{#1}}
\caption{#2}\end{figure}}
\begin{document}
\begin{multicols}{2}
\lipsum[1-3]
\Wfigure{%
\begin{tikzpicture}
\draw rectangle (8,2);
\end{tikzpicture}}
{Figure in some column}
\lipsum[3-4]
\Wfigure{%
\begin{tikzpicture}
\draw rectangle (8,2);
\end{tikzpicture}}
{Figure in some column}
\lipsum[5-6]
\end{multicols}
\end{document}
这将需要多次运行 LaTeX(因为它内部使用交叉引用),但你会得到:
其次是
在第二页稍后面一点。