I need help for typesetting a complex typographic layout comparable to the Talmud, yet not necessarily in Hebrew. I found the parcolumns package, but it does not support footnotes and it also does not provide a way for columns overflowing into one single column at the end of a page.

I am trying to create a layout that looks similar to that of the Talmud:


Having a main chunk of text in the middle and commentary surronding it, footnotes at the bottom and margin notes on one side...

I couldn't find anything helpful so any help would be very much appreciated.

  • 6
    XeLaTeX is your friend. Check out the work of user ℝaphink. Especially this answer the code of which is on GitHub.
    – Alan Munn
    Commented Nov 2, 2013 at 16:14
  • wow! there are some really great works there... yet, the work of Raphink, looking at the code, shows manual linebreaks for every line of text in the margin area. I would need something that allows me to write the text in text boxes as I work on it not reproducing a historical book... I will look into this more closely. Maybe I find some help nevertheless. Commented Nov 2, 2013 at 17:37
  • I would love to see someone implement this, as it is was a common format for all sorts of commentaries. This question, and some of the answers there are promising, but do not deal with the issue of 'wrapping' the secondary text around the main text, which is the key to it all. And of course adding side notes and footnotes probably makes the job that much tricker. Also the memoir class has lots of side note and footnote functionality build-in, but it does not 'wrap' the secondary text either....
    – jon
    Commented Nov 2, 2013 at 19:14
  • One could do all the above using lots of parboxes, except for getting the text to flow from one box to the next. Except for multicolumn, text flow between boxes is not something which has been addressed (yet). Commented Nov 6, 2013 at 18:32
  • 1
    Flowfram combined with shapepar can do it. The left frame fills the page but is restrained on the right by \parshape. The Right frame fills most of half the page but is restrained on the left by \parshape. The middle frame fills the gap. \parshape can also be used to insert large letters into the middle of text while the text flows around it. Commented Nov 8, 2013 at 15:35

2 Answers 2


flowfram does not appear to be particularly robust. Since this is the first time I've used this package, I suspect improvements are possible.




%\newcommand{\ditto}[2]{% #1 = number of repetitions, #2=rext to repeat
 {\prg_replicate:nn{#1}{#2} }

%put 0.25in header and footer, plus .3in notes on the sides.




%create header, footer and notes





%create variable width frames

\newlength{\halfW}% compute width of top section
\addtolength{\halfW}{-0.25in}% gutter

\newlength{\parW}% compute width if middle section
\addtolength{\parW}{-0.5in}% gutters

\ditto{8}{0pt \halfW }
\ditto{40}{0pt \parW }
\ditto{8}{0pt \mainW }

\newlength{\parI}% indentation for second frame
\newlength{\newW}% compute width at bottom

\ditto{30}{\parI \parW }
\ditto{4}{\parI \newW }

\newlength{\halfI}%compute indentation at top
\newlength{\newI}%compute indentation at bottom

\ditto{8}{\halfI \halfW }
\ditto{20}{\newI \parW }


Header \hfill with \hfill multiple \hfill fields

\hfil Footer

Hi there

Default is to center vertically.

\ditto{12}{This is a test.  If this had been a real emergency, I would be gone from here and you would not be hearing me.
Oh, you would be in so much trouble and I would be laughing my ass off! \\}

\ditto{5}{This is a test.  If this had been a real emergency, I would be gone from here and you would not be hearing me.
Oh, you would be in so much trouble and I would be laughing my ass off! \\}

\ditto{8}{This is a test.  If this had been a real emergency, I would be gone from here and you would not be hearing me.
Oh, you would be in so much trouble and I would be laughing my ass off! \\}

\rule{\linewidth}{0pt}%some text is required

enter image description here

  • While the default for static is to vertically center the text, the default for dynamic is to start at the top (which is somewhat easier to use). \vfil and \rule have inconsistent results. Commented Nov 10, 2013 at 0:32
  • Around line 33, you have \addtolength{\headY}{-0.25}, but you need to specify a unit of measurement, I think.
    – jon
    Commented Nov 10, 2013 at 4:36
  • @jon - thanks. If anything, using flow frames instead of dynamic frames is even flakier. It should be noted that \parshape is only good for one paragraph, so a blank line ruins all the indentation. Commented Nov 10, 2013 at 14:59
  • @John Kormylo, can you send this me the doc that you made in its original format? Commented Nov 24, 2014 at 22:56
  • @Chiddushei Torah - I didn't save it, but you can just run the answer. Or do you want the document posted by r33nty? Commented Nov 25, 2014 at 16:38

Here is an alternative based on TikZ nodes rather than flowfram columns. The advantage is that you don't have to deal with parshape. The disadvantage is that you have to manually break paragraphs between nodes.

\usepackage{mwe}% for image and \lipsum


\newcommand{\nopar}{\strut\parfillskip 0pt}
% manually inserted at end of minipage

\begin{tikzpicture}[every node/.style={inner sep=0pt}]
\node[minimum width=\textwidth, minimum height=\textheight] (Page) at (0.5\textwidth,0.5\textheight) {};
% define 0.25in header and footer, plus .5in notes on the sides.
\node[minimum width=\textwidth-1in, minimum height=\textheight-.5in] (Text) at (Page.center) {};
\node[minimum width=\textwidth-1in, minimum height=.25in,below] (Top) at (Page.north) {};
\node[minimum width=\textwidth-1in, minimum height=.25in,above] (Bottom) at (Page.south) {};
\node[minimum width=.5in, minimum height=\textheight,right] (Left) at (Page.west) {};
\node[minimum width=.5in, minimum height=\textheight,left] (Right) at (Page.east) {};
% example headers
\node[below right] at (Top.north west) {\huge left};
\node[below] at (Top.north) {\huge center};
\node[below left] at (Top.north east) {\huge right};
% example footers
\node[above] at ($(Bottom.south west)!.333!(Bottom.south east)$) {\huge 1/3};
\node[above] at ($(Bottom.south west)!.667!(Bottom.south east)$) {\huge 2/3};
% example left margin
\node[below right,text width=.4in,align=left] at (Left.north west) 
  {Notice that the margin notes go all the way to the top};
\node[above right,text width=.4in,align=left] at (Left.south west) 
  {and bottom};
% example columns
\node[below right] (A) at (Text.north west) {\begin{minipage}{3.2in}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 
Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. 
Nam arcu libero, nonummy eget, consectetuer id,
vulputate a, magna. Donec vehicula augue eu neque.\nopar
\node[below right] (B) at (A.south west) {\begin{minipage}{2in}
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. 
Mauris ut leo. Cras viverra metus rhoncus sem. 
Nulla et lectus vestibulum urna fringilla ultrices. 
Phasellus eu tellus sit amet tortor gravida placerat. 
Integer sapien est, iaculis in, pretium quis, viverra ac, nunc. 
Praesent eget sem vel leo ultrices bibendum. Aenean faucibus.
Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. 
Curabitur auctor semper nulla. Donec varius orci eget risus. 
Duis nibh mi, congue eu, accumsan eleifend, sagittis quis, diam. 
Duis eget orci sit amet orci dignissim rutrum.


Nulla malesuada porttitor diam. 
Donec felis erat, congue non, volutpat at, tincidunt tristique, libero. 
Vivamus viverra\nopar
\node[below right] (C) at (B.south west) {\begin{minipage}{6.5in}
fermentum felis. 
Donec nonummy pellentesque ante. 
Phasellus adipiscing semper elit. 
Proin fermentum massa ac quam. 
Sed diam turpis, molestie vitae, placerat a, molestie nec, leo. 
Maecenas lacinia. Nam ipsum ligula, eleifend at, accumsan nec, suscipit a, ipsum. 
Morbi blandit ligula feugiat magna. 
Nunc eleifend consequat lorem. 
Sed lacinia nulla vitae enim. 
Pellentesque tincidunt purus vel magna. Integer non enim. 
Praesent euismod nunc eu purus.

\node[below left] (D) at (Text.north east) {\begin{minipage}{3.2in}
Fusce mauris. 
Vestibulum luctus nibh at lectus. 
Sed bibendum, nulla a faucibus semper, leo velit ultricies tellus, ac venenatis arcu wisi vel nisl. 
Vestibulum diam. 
Aliquam pellentesque, augue quis sagittis posuere, turpis lacus congue quam, in hendrerit risus\nopar
\node[below left] (E) at (D.south east) {\begin{minipage}{2in}
eros eget felis. 
Maecenas eget erat in sapien mattis porttitor. 
Vestibulum porttitor. 
Nulla facilisi. 
Sed a turpis eu lacus commodo facilisis. 
Morbi fringilla, wisi in dignissim interdum, justo lectus sagittis dui, et
vehicula libero dui cursus dui. 
Mauris tempor ligula sed lacus. Duis cursus enim ut augue. 
Cras ac magna.
Cras nulla. Nulla egestas. 
Curabitur a leo. 
Quisque egestas wisi eget nunc. 
Nam feugiat lacus vel est.
Curabitur consectetuer.

\node[below] (F) at ($(Text.north)+(0,-1in)$) {\begin{minipage}{2in}


Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Donec odio elit, dictum\nopar
\node[below right] (G) at (F.south west) {\begin{minipage}{4.25in}
in, hendrerit sit amet, egestas sed, leo.
Praesent feugiat sapien aliquet odio. 
Integer vitae justo. 
Aliquam vestibulum fringilla lorem.
Sed neque lectus, consectetuer at, consectetuer sed, eleifend ac, lectus. 
Nulla facilisi. 
Pellentesque eget lectus. 
Proin eu metus. 
Sed porttitor. 
In hac habitasse platea dictumst. 
Suspendisse eu lectus.
Ut mi mi, lacinia sit amet, placerat et, mollis vitae, dui. 
% example right margin
\node[below left,text width=.4in,align=left] at (Right.east |- F.north)
  {You can align margin notes to column locations};
\node[left,text width=.4in,align=left] at (Right.east)
  {\resizebox{.4in}{!}{You can}
  \resizebox{.4in}{!}{the font}
  \resizebox{.4in}{!}{to fit the}

new version

Since a lot of this will be repeated, one should create macros and/or environments to cut down the clutter.

  • Is there a way to have a single box in the middle?
    – Nero
    Commented Oct 12, 2019 at 11:12
  • 1
    @Nero - Lot's of ways, but they all involve manually breaking paragraphs. Commented Oct 12, 2019 at 13:35
  • What would be the easiest way to have 2 columns and a box in the middle, even if one has to break up paragraphs manually? Or, alternatively, the same Talmudic system but with two standard rigid columns from top to bottom.
    – Nero
    Commented Oct 15, 2019 at 17:15
  • Use flowfam with 6 flow frames and 1 static or dynamic frame (if you want different content on each page. Ask this as a new question and I'll show details. I seem to recall this question being asked recently but cannot find it. Commented Oct 16, 2019 at 1:14
  • Just asked here tex.stackexchange.com/questions/512455/…
    – Nero
    Commented Oct 16, 2019 at 12:01

You must log in to answer this question.

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