2009-11-07 49 views
2

我正在爲雜誌寫文章。我試圖在3列文檔的右上角插入一個(浮動)2列框,並且文本很好地圍繞它並在列對齊。我正在使用tikz軟件包製作盒子,這樣我就可以有一個圓邊和背景色的盒子。 我試圖做使用wrapfig包裝(我已經嘗試了一些minipage東西也一樣),但我不能得到它的工作。Multicol和頁面頂部的浮動框,文字環繞它

這是一些代碼,說明我想要做的,我怎麼一直在努力做到這一點:

\documentclass{article} 
\usepackage{wrapfig} 
\usepackage{tikz} 
\usepackage{multicol} 

\definecolor{col}{rgb}{0.6,0.6,0.9} 
\setlength{\columnsep}{0.5cm} 
\newcommand{\floatingBox}[3] 
{ 
\noindent 
\begin{wrapfigure}{#1}{#2} 
\begin{tikzpicture} 
\node[rounded corners=5pt, fill=col, text width=\linewidth]{#3}; 
\end{tikzpicture} 
\end{wrapfigure} 
} 

\begin{document} 
\begin{multicols}{3} 
\large 
Some random rambling to fill a page. 

Aardvark AB aback abacus abaft abalone abandon abandoned abandonment abase 
abasement abash abashed abate abatement abattoir abbess abbey abbot 
abbreviate abbreviation ABC abdicate abdication abdomen abdominal abduct 
abduction abeam abed aberrant aberration abet abeyance abhor abhorrence 
abhorrent abide abiding ability abject abjure ablaze able able-bodied ABM 
abnegation abnormal abnormality aboard abode abolish abolition abolitionist 
A-bomb abominable abominate abomination aboriginal aborigine abort abortion 
abortionist abortive abound about about-face above aboveboard abracadabra 
abrade Abraham abrasion abrasive abreast abridge abridgment abroad abrogate 
abrogation abrupt abscess abscond absence absent absentee absenteeism 
absent-minded absinthe absolute absolute zero absolution absolutism absolve 
absorb absorbency absorbent absorbing absorption abstain abstemious 
abstention abstinence abstinent abstract abstracted abstraction abstruse 
absurd absurdity abundance abundant abuse abusive abut abutment abysmal 
abyss AC acacia academia academic academician academy a cappella accede 
accelerate acceleration accelerator accent accentuate accentuation accept 
acceptability acceptable acceptance access accessibility accessible 
accession. 


\floatingBox{tr}{2\columnwidth + 1\columnsep}{ 
\begin{multicols}{2} 
A box that spans 2 columns and should be floating on top of the page with 
the text wrapping around it. It's aligned to the right, so it would be 
exactly above 2 entire columns, with one column to its left. 
\end{multicols} 
} 


Accessory accident accidental accident-prone acclaim acclamation acclimate 
acclimation acclimatization acclimatize accolade accommodate accommodating 
accommodation accompaniment accompanist accompany accomplice accomplish 
accomplished accomplishment accord accordance accordingly according to 
accordion accost account accountability accountable accountant accounting 
accouterments accredit accreditation accrue accumulate accumulation 
accumulative accuracy accurate accursed accusation accusative accusatory 
accuse accused accusingly accustom accustomed ace acerbic acerbity 
acetaminophen acetate acetic acid acetone acetylene ache achievable achieve 
achievement. 

\end{multicols} 
\end{document} 

回答

1

這是我的經驗,這種佈局(跨越多個,但不是所有的頁面上的列)很難獲得與乳膠。

,我所知道的最好的解決辦法是flowfram package。在編寫文檔內容之前,該軟件包允許您定義頁面佈局(某些框應放置在哪裏)。

一個小的代碼示例在下面給出。這是flowfram包附帶的海報例子的重構。

\documentclass[a4wide]{article} 

\usepackage{color} 
\usepackage{helvet} 
\usepackage{flowfram} 

\setlength{\columnsep}{0.3cm} 

% Base the page layout on 3 column with static header. 
\NcolumnStop{3}{1 cm} 
% give the static frame a label to make it easier to keep track of 
\setstaticframe{\value{maxstatic}}{label={title},backcolor=[cmyk]{0.64,0,0.95,0.40},textcolor=white} 

% On the first page, replace last two columns with 
% 2 columns and a static above 
\setflowframe{2,3}{pages={>1}} 

\computeflowframearea{2,3} 
\twocolumnStopinarea[1]{0.3\ffareaheight}{\ffareawidth}{\ffareaheight}{\ffareax}{\ffareay} 
\setstaticframe{\value{maxstatic}}{label={info},backcolor=[cmyk]{0.26,0,0.76,0},clear} 

\setallflowframes{backcolor=[cmyk]{0.15,0,0.69,0}} 

\raggedright 
\setlength{\parindent}{15pt} 

\begin{document} 
\begin{staticcontents*}{title} 
\begin{center} 
\bfseries\Large Creating stuff in \LaTeX\par 
\end{center} 
\end{staticcontents*} 

\pagestyle{empty} 

\begin{staticcontents*}{info} 
\begin{staticfigure} 

The {flowfram} package is designed to enable you to create 
frames in a document such that the 
contents of the {document} environment flow from one 
frame to the next in the order that they were defined. 
This is useful for creating posters 
or magazines or any other form of document that does not 
conform to the standard one or two column layout. 

\vfill 

\caption{The commands used to define the frames for this document g.} 
\protect\label{fig:thisdoc} 
\end{staticfigure} 
\end{staticcontents*} 

This is a modified version of the manual for the {flowfram} 
package. It is intended to illustrated what can be done. See the 
full manual (ffuserguide.pdf) for 
a comprehensive description, as this may now be out of date. 
The commands used to define the frames for 
this document are shown in Figure~\ref{fig:thisdoc}. 
If the columns are very narrow, it may be better to 
use {raggedright}, otherwise \TeX\ may have a 
problem working out the line breaks. 

\section{Introduction} 

The {flowfram} package is designed to enable you to create 
frames in a document such that the 
contents of the {document} environment flow from one 
frame to the next in the order that they were defined. 
This is useful for creating posters 
or magazines or any other form of document that does not 
conform to the standard one or two column layout. 

\section{Setting up Frames} 

The {flowfram} package provides three types of frame: 
{flow frames}, {static 
frames} and {dynamic frames}. 

\subsection{Flow Frames} 

The flow frame is the principle type of frame. 
The text of the {document} environment will flow from 
one frame to the next in order of definition. Each 
flow frame has an associated width, height, 
position on the page, and optionally a border. 

It is recommended that all the flow frames in a document 
have the same width, otherwise problems may occur 
when a paragraph spans to flow frames of unequal 
widths. This is because \TeX's output routine does not 
register the change in {hsize} until it reaches 
a paragraph break. If it is absolutely necessary for 
flow frames to have unequal widths, judicious use of 
{framebreak} is required. 


\end{document} 
1

Nonfloating figure spanning two columns in multicol environment

我也有類似的問題。小型郵件是我聽說過的最好主意。

它也可以與wrapfig完成,但它需要大量的調整,但它是可能的:

Using wrapfig to span multiple columns 

Wrapfig can't automatically make matching cutouts in adjacent columns 
because it doesn't know which text will land in just the right place 
in the column next-door. It certainly can't handle floating in such 
situations! 

Here are some methods for doing such layout "by hand". They are 
practical for one or a few such figures where you can tweak the 
layout for the final copy. It is too painful to do this for long 
or frequently-revised documents. If you do have multiple fiddling, 
fix the first one in each chapter (or after any forced page break), 
rerun, then fix the second, etc. 

(These examples use calc.sty to evaluate overhangs in place.) 

Cutouts in Matching Columns 

~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~X ~~~~~~~~~~~~~~~~~Y 
~~~~~~~~~     ~~~~~~~~~ 
~~~~~~~~~     ~~~~~~~~~ 
~~~~~~~~~     ~~~~~~~~~ 
~~~~~~~~~     ~~~~~~~~~ 
~~~~~~~~~     ~~~~~~~~~ 
~~~~~~~~~     ~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 

Initially, write the document without the wrapfigure, and locate the 
desired natural linebreak at "X". (This first step is used for all 
methods described here.) Then change to 

~~~~~~~~X 
\begin{wrapfigure}[6]{r}[.5\width+.5\columnsep]{6cm} 
... 
\end{wrapfigure} 
~~~~.... 

and run LaTeX again. This will print the figure overlapping the right 
column, but no matter. Use this run to locate position "Y" in the text. 
For the final run, switch to: 

~~~~~~~~X 
\begin{wrapfigure}[6]{r}[.5\width+.5\columnsep]{6cm} 
... 
\end{wrapfigure} 
~~~~.... 
...~~~~~~~Y 
\begin{wrapfigure}[6]{l}[.5\width+.5\columnsep]{6cm} 
\vfill 
\end{wrapfigure} 
~~~~~~~~~~~ 


Taking a whole column plus a cutout 

~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~X ~~~~~~~~~~~~~~~~~Y 
~~~~~~~~~ 
~~~~~~~~~ 
~~~~~~~~~ 
~~~~~~~~~ 
~~~~~~~~~ 
~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 

Locate "X" first, without any figure, as above, then write the 
document like: 

~~~~~~~~X 
\begin{wrapfigure}[6]{r}[\columnwidth+\columnsep]{9cm} 
... 
\end{wrapfigure} 
~~~~.... 

and ignore the overprinting of the right column. Then, after locating 
"Y" in the text, switch to: 

~~~~~~~~X 
\begin{wrapfigure}[6]{r}[\columnwidth+\columnsep]{9cm} 
... 
\end{wrapfigure} 
~~~~.... 
...~~~~~~~Y\vspace{6\baselinskip} 
~~~~~~~~~~~ 
for the final layout 


a whole column preceding a cutout 

~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~X ~~~~~~~~~~~~~~~~~Y 
          ~~~~~~~~~ 
          ~~~~~~~~~ 
          ~~~~~~~~~ 
          ~~~~~~~~~ 
          ~~~~~~~~~ 
          ~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 

After locating "X", write the draft document like: 

~~~~~~~~X\vspace{6\baselinskip} 
~~~~.... 
~~~~~~~~~~~~~ 
~~~~~~~~~ 

run LaTeX to locate "Y", and then switch to: 

~~~~~~~~X\vspace{6\baselinskip} 
~~~~.... 
~~~~~~~~~~~~~Y 
\begin{wrapfigure}[6]{l}[\columnwidth+\columnsep]{9cm} 
... 
\end{wrapfigure} 
~~~~~~~~~ 

Spanning (parts of) three columns 

~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~X ~~~~~~~~~~~~~~~~~Y ~~~~~~~~~~~~~~~~~Z 
~~~~~~~~~          ~~~~~~~~~ 
~~~~~~~~~          ~~~~~~~~~ 
~~~~~~~~~          ~~~~~~~~~ 
~~~~~~~~~          ~~~~~~~~~ 
~~~~~~~~~          ~~~~~~~~~ 
~~~~~~~~~          ~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ 

This uses a combination of the above. First locate X, then use 

~~~~~~~~X 
\begin{wrapfigure}[6]{r}[.5\width+.5\columnwidth+\columnsep]{12cm} 
... 
\end{wrapfigure} 
~~~~.... 

Locate Y from this, and change to 

~~~~~~~~X 
\begin{wrapfigure}[6]{r}[.5\width+.5\columnwidth+\columnsep]{12cm} 
... 
\end{wrapfigure} 
~~~~.... 
~~~~~~~~~~~~Y\vspace{6\baselineskip} 
~~~~~~~.... 

which allows you to locate Z, to end up with 

~~~~~~~~X 
\begin{wrapfigure}[6]{r}[.5\width+.5\columnwidth+\columnsep]{12cm} 
... 
\end{wrapfigure} 
~~~~.... 
~~~~~~~~~~~~Y\vspace{6\baselineskip} 
~~~~~~~.... 
~~~~~~~~~~~~Z 
\begin{wrapfigure}[6]{l}[.5\width+.5\columnwidth+\columnsep]{12cm} 
\vfill 
\end{wrapfigure} 




(Of course, to do matching cut-outs properly requires typesetting 
the text to a grid.) 

也就是說從wrapfig文檔。 祝你好運。