6

One of my favorite poets is probably Guillaume Apollinaire. His story and proximity to Picasso made him a precursor. Calligrams was a constant attempt to merge poetry and visual. I am wondering how we could actually recreate in TikZ enter image description here enter image description here enter image description here

5
  • 1
    There’s one example of concrete poetry at tex.stackexchange.com/a/193563 I’m not persuaded that tikz is the best tool for this.
    – Thérèse
    Commented Mar 30, 2019 at 23:41
  • 1
    A fine challenge! Personally, I'd like to try La colombe poignardée et le jet d'eau, but would prefer to do it with pstricks.
    – Bernard
    Commented Mar 30, 2019 at 23:42
  • @Bernard oh this one is very pretty too !! I had it to my initial question
    – JeT
    Commented Mar 30, 2019 at 23:45
  • @Thérèse I am not sure I agree: tex.stackexchange.com/a/68740/121799.
    – user121799
    Commented Mar 31, 2019 at 0:45
  • See also: tex.stackexchange.com/a/403353/48 Commented Mar 31, 2019 at 0:51

2 Answers 2

3

This is just to mention that TikZ has already built in a large selection of tricks that can be applied to paths. Here is a very basic example. (Yes, I know I am not a poet.;-)

\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{decorations.text}
\begin{document}
\begin{tikzpicture}
\def\mypath{
 (-2,0) to[bend right=10] (0,5.1)
 to[bend right=10] (2,0) -- (1.5,0) -- (0.8,1) -- (-0.8,1) -- (-1.5,0) -- cycle}
\draw \mypath; 
\path[decorate,decoration={text along path,
text={In Paris there is a tower and beneath it there grows a flower. And often
on Mondays there is a shower.}}] \mypath;
\end{tikzpicture}
\end{document}

enter image description here

The IMHO most stunning tools are however not from the pgfmanual, but due to Paul Gaborit's great answer. You basically define the contour and the macro takes care of the rest. (Of course, you may want to tune things in the end a bit, but it is stunning how much it does out of the box.)

\documentclass{standalone}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{shapepar}
\usepackage{microtype}
\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{calc,fit,intersections}

\def\shapeparnodeaccuracy{2}
\newcommand\shapeparnode[6][]{
  % 6 parameters:
  % style for node (default:empty),
  % h margin, v margin, left path, right path, text (just one paragraph!)

  % name left and right paths and compute there bounding boxes
  \begin{scope}[local bounding box=leftbb]
    \path[name path global=left,xshift=#2] #4;
  \end{scope}
  \node[inner ysep=-#3,inner xsep=0pt,fit=(leftbb)](leftbb){};
  \begin{scope}[local bounding box=rightbb]
    \path[name path global=right,xshift=-#2] #5;
  \end{scope}
  \node[inner ysep=-#3,inner xsep=0pt,fit=(rightbb)](rightbb){};

  % global bounding box
  \path let
  \p1=(leftbb.north west), \p2=(leftbb.south west),
  \p3=(rightbb.north east), \p4=(rightbb.south east)
  in
  \pgfextra{
    \pgfmathsetmacro{\ymin}{(\y1 < \y3) ? \y1 : \y3}
    \pgfmathsetmacro{\ymax}{(\y2 > \y4) ? \y2 : \y4}
    \typeout{ymin \ymin}
    \typeout{ymax \ymax}
  } node[inner sep=0,fit={(\x1,\ymin pt)(\x3,\ymax pt)}](mybb){};

  % compute nb steps
  \path let \p1=(mybb.north), \p2=(mybb.south) in
  \pgfextra{
    \pgfmathsetmacro{\fnthght}{1em/\shapeparnodeaccuracy}
    \pgfmathtruncatemacro{\nbsteps}{(\y1-\y2)/\fnthght}
    \xdef\nbsteps{\nbsteps}
    \typeout{nb steps \nbsteps}
  };

  % horizontal references
  \path (mybb.north) -- (mybb.south)
  \foreach \cnt in {0,1,...,\nbsteps}{
    \pgfextra{\pgfmathsetmacro{\pos}{\cnt/\nbsteps}}
    coordinate[pos=\pos] (ref \cnt)
  };

  % left and right boundaries coordinates
  \foreach \cnt in {0,1,...,\nbsteps}{
    % an horizontal line from left to right
    \path[name path=ltor]
    (mybb.west |- ref \cnt) --  (mybb.east |- ref \cnt);
    % same line from right to left
    \path[name path=rtol]
    (mybb.east |- ref \cnt) -- (mybb.west |- ref \cnt);
    % left boundary
    \path[name intersections={of=rtol and left,by={l \cnt},sort by=rtol}];
    % right boundary
    \path[name intersections={of=ltor and right,by={r \cnt},sort by=ltor}];
  }
  % start point (and initial value of boundshape)
  \path let \p1=(l 0) in 
  \pgfextra{
    \pgfmathsetmacro{\xstart}{\x1}
    \xdef\boundshape{{0}{0}b{\xstart}}
    \xdef\xmin{\xstart}
    \xdef\xmax{\xstart}
  };

  % top and bottom
  \path let \p1=(l 0), \p2=(l \nbsteps) in
  \pgfextra{
    \pgfmathsetmacro{\ystart}{\y1}\xdef\ystart{\ystart}
    \pgfmathsetmacro{\yending}{\y2}\xdef\yending{\yending}
  };
  % incremental definition of boundshape
  \foreach \cnt in {0,1,...,\nbsteps}{
    \path let \p1=(l \cnt), \p2=(r \cnt) in
    \pgfextra{
      \pgfmathsetmacro{\start}{\x1}
      \pgfmathsetmacro{\len}{\x2-\x1}
      \pgfmathsetmacro{\ypos}{\cnt/\nbsteps*(\ystart - \yending)}
      {\let\\=\relax \xdef\boundshape{\boundshape\\{\ypos}t{\start}{\len}}}
      \pgfmathsetmacro{\xmin}{(\xmin < \start) ? \xmin : \start}
      \xdef\xmin{\xmin}
      \pgfmathsetmacro{\xmax}{(\xmax > \start + \len) ? \xmax : \start + \len}
      \xdef\xmax{\xmax}
    };
  }
  % draw the node with text in a shapepar
  \pgfmathsetmacro{\ymax}{\ystart - \yending}
  {\let\\=\relax \xdef\boundshape{\boundshape\\{\ymax}e{0}}}
  \node[#1,text width=\xmax pt - \xmin pt,align=flush left,
  anchor=north west,inner sep=0]
  at (mybb.north west -| \xmin pt,0)
  {\Shapepar[1pt]{\boundshape}#6\par};
}

\def\mytext{In Paris there is a tower and beneath it there grows a flower.}

\begin{document}%
  \begin{tikzpicture}
      \def\pathone{(0,1) -- (-0.8,1) -- (-1.5,0) --
      (-2,0) to[bend right=10] (0,5.1)}
      \def\pathtwo{(0,5.1)
    to[bend right=10] (2,0) -- (1.5,0) -- (0.8,1) -- (-0.8,1)}
      \fill[top color=lime,bottom color=orange,middle color=yellow,draw=white]
      \pathone -- \pathtwo -- cycle;
      \def\pathone{(0,1) -- (-0.8,1) -- (-1.5,0) --
      (-1.6,0) to[bend right=10] (0,4.1)}
      \def\pathtwo{(0,4.1)
    to[bend right=10] (1.6,0) -- (1.5,0) -- (0.8,1) -- (-0.8,1)}
      \shapeparnode[text=black,font=\footnotesize\scshape]
      {0.1em}{0.1em}{\pathone}{\pathtwo}{\mytext}%
      %\draw[orange] \pathone;
      %\draw[orange] \pathtwo;
\end{tikzpicture}
\end{document}

enter image description here

3

Stolen from PSTricks gallery:

\documentclass[pstricks,convert]{standalone}
\usepackage[T1]{fontenc}
\usepackage{mathptmx}
\usepackage{pst-plot}
\usepackage{pst-text}

\newdimen\MyDim \MyDim=30pt
\makeatletter
\def\doPerChar#1#2\@nil{%
    \CharacterAction{#1}%
    \ifx\relax#2\relax\else\doPerChar#2\@nil\fi}
\def\perChar#1{\doPerChar#1\@nil}
\def\CharacterAction#1{%
  \fontsize{\MyDim}{1.1\MyDim}\selectfont#1%
  \global\advance\MyDim by -0.175pt}
\makeatother


\begin{document}

\begin{pspicture}(-5,-5)(5,5)
\pstextpath{%
  \parametricplot[linestyle=none,plotpoints=5000,algebraic,unit=0.3]
    {50}{0}[/A 5e-3 def ]{A*(cos(t)+t^2*sin(t)) | A*(sin(t)-t^2*cos(t))}}{\perChar{%
     {$a$}{$\!^2$}+{$b$}{$\!^2$}={$c$}{$\!^2$}~is~from~Pythagoras~%
     who~lived~in~Greek.~{$\sin^2x+\cos^2x=1$}~is~also~from~him~and~%
     the~same~in~geometry~\ldots}}
\end{pspicture}

\end{document}

enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .