Two-column text with circular insert

There is now a package pullquote which allows to create various shapes of inserts.

All you have to specify is the text which should "flow" plus some rectangular "object" which is inserted. Everything else is calculated automatically by the environment pullquote.

In principle, every shape can be defined by providing an appropriate shape function macro. See the package documentation.

Test example:

\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum,xcolor,graphicx}
\usepackage{booktabs}
\usepackage[latin]{babel}

\usepackage{pullquote}

\usetikzlibrary{shapes,backgrounds,calc}

\makeatletter
\tikzset{circle split part fill/.style  args={#1,#2}{%
    alias=tmp@name, 
    postaction={%
      insert path={
        \pgfextra{% 
          \pgfpointdiff{\pgfpointanchor{\pgf@node@name}{center}}%
          {\pgfpointanchor{\pgf@node@name}{east}}%            
          \pgfmathsetmacro\insiderad{\pgf@x}
          \fill[#1] (\pgf@[email protected]) ([xshift=-\pgflinewidth]\pgf@[email protected]) arc
          (0:180:\insiderad-\pgflinewidth)--cycle;
          \fill[#2] (\pgf@[email protected]) ([xshift=\pgflinewidth]\pgf@[email protected])  arc
          (180:360:\insiderad-\pgflinewidth)--cycle; }}}}}  
\makeatother  

\def\addquote
{%
  \Large
  \begin{tabular}[b]{p{5cm}}
    \midrule
    \textit{Wir m\"ussen wissen.}\\
    \textit{Wir werden wissen.}\\
    \mbox{}\hfill\large\textsc{David Hilbert}\\
    \midrule
  \end{tabular}%
}

\def\alicegraphic
{%
  \begin{tikzpicture}
    \clip (0,0) circle (2.7cm);
    \node (0,0) {\includegraphics[width=5cm]{alice}};
  \end{tikzpicture}%
}

\def\alicetext
{%
  They were indeed a queer-looking party that assembled on the bank--the birds with draggled feathers, the animals with their fur clinging close to them, and all dripping wet, cross, and uncomfortable.

  The first question of course was, how to get dry again: they had a consultation about this, and after a few minutes it seemed quite natural to Alice to find herself talking familiarly with them, as if she had known them all her life. Indeed, she had quite a long argument with the Lory, who at last turned sulky, and would only say, `I am older than you, and must know better'; and this Alice would not allow without knowing how old it was, and, as the Lory positively refused to tell its age, there was no more to be said.

  At last the Mouse, who seemed to be a person of authority among them, called out, `Sit down, all of you, and listen to me! I'll soon make you dry enough!' They all sat down at once, in a large ring, with the Mouse in the middle. Alice kept her eyes anxiously fixed on it, for she felt sure she would catch a bad cold if she did not get dry very soon.

  `Ahem!' said the Mouse with an important air, `are you all ready? This is the driest thing I know. Silence all round, if you please! "William the Conqueror, whose cause was favoured by the pope, was soon submitted to by the English, who wanted leaders, and had been of late much accustomed to usurpation and conquest. Edwin and Morcar, the earls of Mercia and Northumbria--"'

  `Ugh!' said the Lory, with a shiver.

  `I beg your pardon!' said the Mouse, frowning, but very politely: `Did you speak?'

  `Not I!' said the Lory hastily.

  `I thought you did,' said the Mouse. `--I proceed. "Edwin and Morcar, the earls of Mercia and Northumbria, declared for him: and even Stigand, the patriotic archbishop of Canterbury, found it advisable--"'

  `Found what?' said the Duck.

  `Found it,' the Mouse replied rather crossly: `of course you know what "it" means.'

  `I know what "it" means well enough, when I find a thing,' said the Duck: `it's generally a frog or a worm. The question is, what did the archbishop find?'

  The Mouse did not notice this question, but hurriedly went on, `"--found it advisable to go with Edgar Atheling to meet William and offer him the crown. William's conduct at first was moderate. But the insolence of his Normans--" How are you getting on now, my dear?' it continued, turning to Alice as it spoke.
}

\def\circlegraphic
{%
  \begin{tikzpicture}
    \huge 
    \node[name=s,
    shape=circle split,
    draw=gray!40,line width=2mm,
    circle split part fill={blue!50,red!50}
    ] at (5,5) {Big text\nodepart{lower} very big lower};
  \end{tikzpicture}%
}

\begin{document}
\begin{pullquote}{object={\includegraphics[width=3cm]{mill}}}
  \lipsum[1-3]
\end{pullquote}
\begin{pullquote}{object=\addquote}
  \lipsum[1-2]
\end{pullquote}
\begin{pullquote}{shape=circular,object=\alicegraphic}
  \alicetext
\end{pullquote}
\begin{pullquote}{shape=circular,object=\circlegraphic}
  \lipsum[1-3]
\end{pullquote}
\begin{pullquote}{shape=image,image=alice.png,imageopts={width=5cm}}
  \alicetext
\end{pullquote}
\begin{pullquote}{shape=image,image=duck1.pdf,imageopts={width=5cm}}
  \lipsum[1-3]
\end{pullquote}
\end{document}

example 1 example 2 example 3 example 4 example 5 example 6

I'd like to thank the user tohecz for providing a simple circle approximation formula which was easy to implement as an expandable TeX macro.

I took the circular TikZ graphic from an answer by Altermundus: TikZ - Two Colored Circle Split.

The last two examples use an experimental feature where the shape of the insert is automatically determined from the image shape. See an additional remark concerning this feature in an answer by Speravir: Pullquotes not working.


I don't think there are automated approached for this kind of thing in LaTeX. The procedure I've implemented is based on trial-and-error and uses \parshape. Here are the steps I followed:

0. Preliminaries

\parshape <n> <i1> <w1> <i2> <w2> ... <in> <wn>

The first "argument" to \parshape represents the number of lines <n> that need to be adjusted. Subsequent "arguments" are pairs representing the indent <i_> and width <w_> of the lines.

Important to note is that \parshape only applies to the current paragraph. So, even if you specify a modification of (say) 10 lines in a paragraph containing only (say) 5, only 5 lines will be adjusted. Conversely, modifying (say) 10 lines in a paragraph containing (say) 15 lines will imply that the last modification holds until the end of the paragraph.

1. Draft

Insert the image in a rough location close to where you want it. I've used

\rlap{% Remove horizontal width
  \smash{% Remove vertical height
    \raisebox{-\height}{\includegraphics[height=12\baselineskip]{alice}}%
  }%
}%

enter image description here

What you should take note of is the lines in the left column affected by the image. There's about 14 lines affected. Note that you have to include an additional "last" line set to the entire column width to "restore" the width of the modified lines (in case the paragraph is not finished at that point).

2. Image relocation and paragraph shape

This is the laborious part.

  1. Move the image to the right/middle of the page (full column width + half of column width separation):

    \hspace{\dimexpr\columnwidth+.5\columnsep}
    
  2. Insert the \parshape indentation and width pairs. Also join subsequent paragraphs together using a \hfill\\ "paragraph break" and \indent combination. This extends the current paragraph to accommodate paragraph. Finally, correct for possible vertical mis-alignment introduced with the figure placement.

    \parshape 15 0pt \columnwidth% 1
      0pt \columnwidth% 2
      0pt 0.8\columnwidth% 3
      0pt 0.73\columnwidth% 4
      0pt 0.725\columnwidth% 5
      0pt 0.71\columnwidth% 6
      0pt 0.7\columnwidth% 7
      0pt 0.7\columnwidth% 8
      0pt 0.71\columnwidth% 9
      0pt 0.725\columnwidth% 10
      0pt 0.72\columnwidth% 11
      0pt 0.725\columnwidth% 12
      0pt 0.73\columnwidth% 13
      0pt 0.73\columnwidth% 14
      0pt \columnwidth% 15
    \rlap{% Remove horizontal width
      \smash{% Remove vertical height
        \hspace{\dimexpr\columnwidth+.5\columnsep}% Push content to middle of page
        \makebox[0pt][c]{% Centre image in middle of page
          % Drop image full height and scale to 12 lines high
          \raisebox{-\height}{\includegraphics[height=12\baselineskip]{alice}}%
        }%
      }%
    }\hfill%
    \\[-2\baselineskip]
    \indent At last the Mouse, who seemed to be a person of authority among them, called out, `Sit down, all of you, and listen to me! I'll soon make you dry enough!' They all sat down at once, in a large ring, with the Mouse in the middle. Alice kept her eyes anxiously fixed on it, for she felt sure she would catch a bad cold if she did not get dry very soon. \hfill \\
    \indent`Ahem!' said the Mouse with an important air, `are you all ready? This is the driest thing I know. Silence all round, if you please! "William the Conqueror, whose cause was favoured by the pope, was soon submitted to by the English, who wanted leaders, and had been of late much accustomed to usurpation and conquest. Edwin and Morcar, the earls of Mercia and Northumbria--"'
    

enter image description here

3. Fine-tuning

Duplicate the process above for the right column:

enter image description here

\documentclass[twocolumn]{article}
\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\begin{document}
They were indeed a queer-looking party that assembled on the bank--the birds with draggled feathers, the animals with their fur clinging close to them, and all dripping wet, cross, and uncomfortable.
The first question of course was, how to get dry again: they had a consultation about this, and after a few minutes it seemed quite natural to Alice to find herself talking familiarly with them, as if she had known them all her life. Indeed, she had quite a long argument with the Lory, who at last turned sulky, and would only say, `I am older than you, and must know better'; and this Alice would not allow without knowing how old it was, and, as the Lory positively refused to tell its age, there was no more to be said.

\parshape 15 0pt \columnwidth% 1
  0pt \columnwidth% 2
  0pt 0.8\columnwidth% 3
  0pt 0.73\columnwidth% 4
  0pt 0.725\columnwidth% 5
  0pt 0.71\columnwidth% 6
  0pt 0.7\columnwidth% 7
  0pt 0.7\columnwidth% 8
  0pt 0.71\columnwidth% 9
  0pt 0.725\columnwidth% 10
  0pt 0.72\columnwidth% 11
  0pt 0.725\columnwidth% 12
  0pt 0.73\columnwidth% 13
  0pt 0.73\columnwidth% 14
  0pt \columnwidth% 15
\rlap{% Remove horizontal width
  \smash{% Remove vertical height
    \hspace{\dimexpr\columnwidth+.5\columnsep}% Push content to middle of page
    \makebox[0pt][c]{% Centre image in middle of page
      % Drop image full height and scale to 12 lines high
      \raisebox{-\height}{\includegraphics[height=12\baselineskip]{alice}}%
    }%
  }%
}\hfill%
\\[-2\baselineskip]
\indent At last the Mouse, who seemed to be a person of authority among them, called out, `Sit down, all of you, and listen to me! I'll soon make you dry enough!' They all sat down at once, in a large ring, with the Mouse in the middle. Alice kept her eyes anxiously fixed on it, for she felt sure she would catch a bad cold if she did not get dry very soon. \hfill \\
\indent`Ahem!' said the Mouse with an important air, `are you all ready? This is the driest thing I know. Silence all round, if you please! "William the Conqueror, whose cause was favoured by the pope, was soon submitted to by the English, who wanted leaders, and had been of late much accustomed to usurpation and conquest. Edwin and Morcar, the earls of Mercia and Northumbria--"'

`Ugh!' said the Lory, with a shiver.

`I beg your pardon!' said the Mouse, frowning, but very politely: `Did you speak?'

`Not I!' said the Lory hastily.

`I thought you did,' said the Mouse. `--I proceed. "Edwin and Morcar, the earls of Mercia and Northumbria, declared for him: and even Stigand, the patriotic archbishop of Canterbury, found it advisable--"'

`Found \textit{what}?' said the Duck.

`Found \textit{it},' the Mouse replied rather crossly: `of course you know what ``it'' means.'

`I know what "it" means well enough, when I find a thing,' said the Duck: `it's generally a frog or a worm. The question is, what did the archbishop find?'

The Mouse did not notice this question, but hurriedly went on, `"--found it advisable to go with Edgar Atheling to meet William and offer him the crown. William's conduct at first was moderate. But the insolence of his Normans--" How are you getting on now, my dear?' it continued, turning to Alice as it spoke.

`As wet as ever,' said Alice in a melancholy tone: `it doesn't seem to dry me at all.'

`In that case,' said the Dodo solemnly, rising to its feet, `I move that the meeting adjourn, for the immediate adoption of more energetic remedies--'

\parshape 15 0pt \columnwidth% 1
  0.05\columnwidth 0.95\columnwidth% 2
  0.1\columnwidth 0.9\columnwidth% 3
  0.2\columnwidth 0.8\columnwidth% 4
  0.25\columnwidth 0.75\columnwidth% 5
  0.28\columnwidth 0.72\columnwidth% 6
  0.29\columnwidth 0.71\columnwidth% 7
  0.3\columnwidth 0.7\columnwidth% 8
  0.3\columnwidth 0.7\columnwidth% 9
  0.31\columnwidth 0.69\columnwidth% 10
  0.31\columnwidth 0.69\columnwidth% 11
  0.3\columnwidth 0.7\columnwidth% 12
  0.29\columnwidth 0.71\columnwidth% 13
  0.25\columnwidth 0.75\columnwidth% 14
  0pt \columnwidth% 15
`Speak English!' said the Eaglet. `I don't know the meaning of half those long words, and, what's more, I don't believe you do either!' And the Eaglet bent down its head to hide a smile: some of the other birds tittered audibly.\hfill\\
\indent `What I was going to say,' said the Dodo in an offended tone, `was, that the best thing to get us dry would be a Caucus-race.'\hfill\\
\indent `What \textit{is} a Caucus-race?' said Alice; not that she wanted much to know, but the Dodo had paused as if it thought that \textit{somebody} ought to speak, and no one else seemed inclined to say anything.

`Why,' said the Dodo, `the best way to explain it is to do it.' (And, as you might like to try the thing yourself, some winter day, I will tell you how the Dodo managed it.)

First it marked out a race-course, in a sort of circle, (`the exact shape doesn't matter,' it said,) and then all the party were placed along the course, here and there. There was no `One, two, three, and away,' but they began running when they liked, and left off when they liked, so that it was not easy to know when the race was over. However, when they had been running half an hour or so, and were quite dry again, the Dodo suddenly called out `The race is over!' and they all crowded round it, panting, and asking, `But who has won?'

This question the Dodo could not answer without a great deal of thought, and it sat for a long time with one finger pressed upon its forehead (the position in which you usually see Shakespeare, in the pictures of him), while the rest waited in silence. At last the Dodo said, `\textit{Everybody} has won, and all must have prizes.'

`But who is to give the prizes?' quite a chorus of voices asked.

`Why, \textit{she}, of course,' said the Dodo, pointing to Alice with one finger; and the whole party at once crowded round her, calling out in a confused way, `Prizes! Prizes!'

Alice had no idea what to do, and in despair she put her hand in her pocket, and pulled out a box of comfits, (luckily the salt water had not got into it), and handed them round as prizes. There was exactly one a-piece all round.

`But she must have a prize herself, you know,' said the Mouse.

`Of course,' the Dodo replied very gravely. `What else have you got in your pocket?' he went on, turning to Alice.

`Only a thimble,' said Alice sadly.

`Hand it over here,' said the Dodo.

Then they all crowded round her once more, while the Dodo solemnly presented the thimble, saying `We beg your acceptance of this elegant thimble'; and, when it had finished this short speech, they all cheered.
\end{document}

Other options for image placement also exist and is possible using, for example, tikz, background, esopic and textpos.

Similar style implementations are described in How do you create pull quotes? and Text wrap with shapepar (insert image between text).

Text taken from Alice's Adventures in Wonderland (chapter III A Caucus-Race and a Long Tale).