52

In this document, from page 12 and following, the notes from the marginpar are overflowing in the footer of each page.

overflowing notes

How can this be achieved in LaTeX?

ConTeXT/LuaTeX based solutions are welcome, too!

raphink
  • 31,894
  • 1
    sadly, the cited file throws the message "File does not begin with %PDF-." from adobe reader, and i'm unable to look past the first page. (trying to read with current adobe reader plugin to current firefox on windows xp.) – barbara beeton Sep 10 '11 at 15:36
  • @barbara: I've downloaded it several times without a problem... and acroread 9 opens it well on Ubuntu Natty. – raphink Sep 10 '11 at 16:33
  • thanks, @Raphink. i've succeeded in downloading. (links to pdf files automatically launch adobe reader from my browser, so intervention is required to download.) it behaves much better now. the notes "wrap" into the footer starting on p.2; what's special about p.12 is that they wrap to the next page! quite an attractive layout, i think. this is somewhat the sort of material addressed by the old edmac, so for latex, i'd look into ledmac. but ultimately, i'd guess it's a custom style, and possibly done with indesign (note hanging punctuation and full-width figures). – barbara beeton Sep 10 '11 at 19:15
  • @barbara: the program used for composition is actually 3B2 (which I have never used) according to the parent page http://listetypo.free.fr/meron/new/. – raphink Sep 10 '11 at 21:53
  • 6
    @JosephWright and latex3 folks: am I right in thinking this would make a great testcase and usecase for latex3's coffins or galleys, or whichever the right module is these days? :) This seems like an interesting page description challenge: "The textblock is 0.66\pagewidth * 0.75\pageheight. The marginpar area consists of three coffins, of width 0.33\pagewidth and heights \textheight and 0.25\textheight, and the text flows between them." This is the sort of layout that usually made me give up on latex and switch to InDesign or a desktop publishing program... I hope latex can do it soon too! – Ben Lerner Sep 15 '11 at 18:19
  • 2
    @Ben. At present, this is well beyond the areas we've examined. 'coffins' are about box alignment, but not reflowing text. I suspect that may come up in the output routine, but even there you have to remember that TeX's model for a page is not really suited to reflowing. Of course, the ConTeXt people may well have a Lua-based solution: I will try to find out. – Joseph Wright Sep 15 '11 at 20:02
  • A solution might be possible with LaTeX for someone with intimate knowledge of LaTeX's output routine. The way I see the algo is to divide the page into three regions. If the sidenotes do not fit in the margin, overflow to region three (rather than the following page) and reduce the main TeX body. As Barbara mentioned ledmac might be a starting point. (sorry added comment again as internet connection was interruped and could not edit). – yannisl Sep 15 '11 at 21:11
  • @Joseph, thanks. It does seem like an output-routine issue, since it's very similar to how TeX already chooses when to break pages. I was thinking perhaps there would be a hook that coffins could use to "link" their outputs, then the output routine would (in several passes?) treat them as miniature pages and break text among them. Yiannis's approach seems hard-coded to this particular layout; I was imagining something more general. Lots of hard corner cases, like ensuring callouts that reflow start on the same page as their marker... Lots of fun problems -- good luck! :) – Ben Lerner Sep 15 '11 at 21:18
  • Any idea on what program was used to create this document (in 1999!) – Aditya Sep 15 '11 at 21:24
  • @Aditya: The program used is 3B2. The author now switched to InDesign. – raphink Sep 15 '11 at 21:27
  • 2
    @Ben Lerner Your suggestion is a variant of multicolumn layouts. This particular layout's main feature is that all notes fit on the same page as the main text (no note is carried over to the next page). This way it can be solved easier by measuring the marginpar boxes, if they exceed overflow to third box, measure again and reduce the textheight. Only complication would be when a note is on the last paragraph or so. When the page textheight is reduced the boxes will change size again and you will need to iterate. I agree though that a general solution is more desirable. Pray for LaTeX3! – yannisl Sep 15 '11 at 21:42

3 Answers3

46

Here's my solution:

marginfootnote example

marginfootnote 2column

Some general remarks on the implementation:

  1. At the moment everything is bottom-aligned. Some positioning magic might be possible to get the margin notes near their footnote marks (especially when they are sparse), but probably only in a second run. It will be a lot of work to get good-looking positions when there are conflicts.
  2. This is mainly based on \footins. I started from the multicol footnote trick from Appendix D of the TeXbook.
  3. I had to make a separate insert for the margin notes, so that they are ignored for calculating the page break position. Whether a footnote is put in the margin or in the foot is decided while executing \footnotetext.
  4. Thanks to David Carlisle for pointing me to a means for recovering footnotes which were split off at page break and putting them back in the margin. See question Can I get at stuff in “current page” or “recent contributions”?.
  5. I'll test the implementation a bit more with standard stuff like floats, fixing issues, but apart from that, I declare this finished. The basic technique requested in the question has been provided. Unless someone has a real use for this and wants some features added or glitches fixed, I won't attempt anything fancy, including the vertical positioning of margin footnotes.

EDIT: The code

The following should be put into a file marginfootnotes.sty:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{marginfootnotes}[2012/04/03 EXPERIMENTAL package for
putting footnotes into the margin, overflowing into the footer]

\RequirePackage{kvoptions}

\RequirePackage{etoolbox}

% We need this package to do some output / insert recovery magic. 

\RequirePackage{afterpage}

% Number of columns in footer.

\DeclareStringOption[2]{columns}

% Should we reorder footnotes on odd pages?

\DeclareBoolOption[true]{fixorder}

\ProcessKeyvalOptions*

% Need a fresh insert for the marginfoornotes.

\newinsert\marginfootnotes@ofn
\skip\marginfootnotes@ofn=\z@
\count\marginfootnotes@ofn=\z@
\dimen\marginfootnotes@ofn=\textheight

% Measure how much material already is in the margin.

\newdimen\marginht@ofn

% We rebuild page geometry such that there are <columns>+1 columns
% (including marginpar) of width \marginparwidth, separated by
% \marginparsep, and \textwidth covers <columns>-1 of them. 

\@tempdima\marginparwidth
\marginparwidth
\dimexpr
  (\textwidth+\marginparwidth+2\marginparsep)%
  /\numexpr\marginfootnotes@columns+\@ne\relax%
  -\marginparsep
\relax
\textwidth\dimexpr\marginfootnotes@columns\marginparwidth+\numexpr\marginfootnotes@columns-\@ne\relax\marginparsep\relax

\advance\evensidemargin\dimexpr\marginparwidth-\@tempdima\relax

% As there are <columns> columns of footnotes now, we need to adjust
% the magnification factor.

\count\footins=\numexpr1000/\marginfootnotes@columns\relax

% Redefinition of \@footnotetext. Measure whether footnote still fits
% in the margin, otherwise insert as footnote.

\long\def\@footnotetext#1%
{%
  \setbox\@tempboxa=\vbox{\typesetfootnote@ofn{#1}}%
  \ifdim\dimexpr\marginht@ofn+\ht\@tempboxa+\dp\@tempboxa\relax>\textheight
    \insert\footins{\typesetfootnote@ofn{#1}}%
   \else
    \insert\marginfootnotes@ofn{\typesetfootnote@ofn{#1}}%
    \global\advance\marginht@ofn\dimexpr\ht\@tempboxa+\dp\@tempboxa\relax
  \fi
}%

\newcommand\typesetfootnote@ofn[1]
{%
  \reset@font\footnotesize
  \interlinepenalty\interfootnotelinepenalty
  \splittopskip\footnotesep
  \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
  \hsize\marginparwidth \@parboxrestore
  \protected@edef\@currentlabel{%
    \csname p@footnote\endcsname\@thefnmark
  }%
  \color@begingroup
  \@makefntext{%
    \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
  \color@endgroup
}

% We hook into the output routine, replacing the "simple" output of
% \footins by our more complicated scheme.

\patchcmd\@makecol
{%
   \ifvoid\footins
     \setbox\@outputbox \box\@cclv
   \else
     \setbox\@outputbox \vbox {%
       \boxmaxdepth \@maxdepth
       \unvbox \@cclv
       \vskip \skip\footins
       \color@begingroup
         \normalcolor
         \footnoterule
         \unvbox \footins
       \color@endgroup
       }%
   \fi
}{\output@footins}{}{}

% If \footins is void, we still need to output the margin
% box. Otherwise we call the macro for balancing footnote columns.

\newcommand\output@footins
{%
   \ifvoid\footins
     \setbox\@outputbox \vbox {%
       \boxmaxdepth \@maxdepth
       \unvbox \@cclv
       \hbox
       {%
         \if@twoside
           \ifodd\c@page
             \hskip\textwidth\hskip\marginparsep
            \else 
             \hskip-\marginparwidth\hskip-\marginparsep
           \fi
          \else
           \hskip\textwidth\hskip\marginparsep
         \fi
         \smash{\box\marginfootnotes@ofn}%
       }%
     }%
   \else
     \setbox\@outputbox \vbox {%
       \boxmaxdepth \@maxdepth
       \unvbox \@cclv
       \vskip \skip\footins
       \color@begingroup
         \normalcolor
         \footnoterule
         \balancecolumns@ofn
       \color@endgroup
       }%
   \fi
   \global\marginht@ofn\z@
}

% The following is roughly based on the example from appendix D of the
% TeXbook, plus outputting the margin column.

\newcount\k
\newcount\lines@ofn
\newbox\footnotetextbox@ofn
\def\balancecolumns@ofn
{%
  \setbox\footnotetextbox@ofn=\box\footins
  \k=\marginfootnotes@columns
  \hbox to\dimexpr\k\marginparwidth+\marginparwidth+\k\marginparsep\relax
  {%
    \footnotesize
    \lines@ofn
    \numexpr
      \dimexpr\ht\footnotetextbox@ofn+\dp\footnotetextbox@ofn\relax
      /\baselineskip
      /\marginfootnotes@columns
    \relax
    \splittopskip\dimexpr\baselineskip-\dp\strutbox\relax
    \vbadness\maxdimen
    \vfuzz\maxdimen
    \splitmaxdepth \dp\strutbox
    \if@twoside
      \ifodd\c@page
        \ifmarginfootnotes@fixorder
          \setbox\footnotetextbox@ofn=\vbox{\unvbox\marginfootnotes@ofn\unvbox\footnotetextbox@ofn}%
        \fi
       \else
        \hskip-\marginparwidth\hskip-\marginparsep
        \setbox\@tempboxa=\box\marginfootnotes@ofn
        \output@tempboxa
        \hskip\marginparsep
      \fi
     \else
      \ifmarginfootnotes@fixorder
        \setbox\footnotetextbox@ofn=\vbox{\unvbox\marginfootnotes@ofn\unvbox\footnotetextbox@ofn}%
      \fi
    \fi
    \dosplits
    \if@twoside
      \ifodd\c@page
        \ifmarginfootnotes@fixorder
          \setbox\@tempboxa=\box\footnotetextbox@ofn
         \else
          \setbox\@tempboxa=\box\marginfootnotes@ofn
        \fi
        \output@tempboxa
      \fi
     \else
      \ifmarginfootnotes@fixorder
        \setbox\@tempboxa=\box\footnotetextbox@ofn
       \else
        \setbox\@tempboxa=\box\marginfootnotes@ofn
      \fi
      \output@tempboxa
    \fi
  }%
}

\newcommand\output@tempboxa
{%
  \@tempcnta
  \numexpr
    \dimexpr\ht\@tempboxa+\dp\@tempboxa\relax
    /\baselineskip
  \relax
  \smash{\vsplit\@tempboxa to \@tempcnta\baselineskip}%
}

\def\dosplits{\ifnum\k>\@ne \splitoff\hskip\marginparsep
\global\advance\k-1\dosplits\fi}
\def\splitoff
{%
  \vsplit\footnotetextbox@ofn to \lines@ofn\baselineskip
}

% Thanks to David Carlisle for pointing me to this easy solution how
% to recover \footins material which was split off by a page break
% and move it into the margin. afterpage code is used and patched
% to avoid conflicts.

\newtoks\output@ofn

\output@ofn{%
  \the\AP@output
  \ifnum\outputpenalty>-\@Mi
    \aftergroup\fixfootins@ofn
  \fi
}%

\global\output{\the\output@ofn}%

\newcommand\fixfootins@ofn
{%
  \AP@savetop
  \addboxcontents\AP@partial
  \ifvoid\AP@footins\else
    \movefootins@ofn
  \fi
  \AP@noindent
}

\newcommand\movefootins@ofn
{%
  \global\advance\marginht@ofn\dimexpr\ht\AP@footins+\dp\AP@footins\relax
  \insert\marginfootnotes@ofn{\unvbox\AP@footins}%
}

\patchcmd\AP@@
{\insert\footins{\unvbox\AP@footins}}
{\movefootins@ofn}{}{}    

\patchcmd\AP@@
{\AP@noindent}
{\AP@noindent\global\output{\the\output@ofn}}{}{}

% Disable \marginpar because it would conflict with margin footnotes.

\renewcommand\marginpar[2][]
{%
  \PackageError{marginfootnotes}
  {\string\marginpar\space disabled}\@eha
}%

Then test with:

\documentclass[a4paper,twoside]{article}

\usepackage[columns=3]{marginfootnotes}

\usepackage[expansion=alltext]{microtype}

\usepackage{lipsum}

\newcommand\fnlipsum[1]
{%
  \begingroup
    \let\par\empty
    \edef\@temp{\csname lipsum@\romannumeral#1\endcsname}%
    \@temp\footnote{\@temp}%
  \endgroup
  \par
}

\usepackage[latin]{babel}

\showboxdepth\maxdimen
\showboxbreadth\maxdimen

\begin{document}

\fnlipsum{1}
\fnlipsum{2}
\fnlipsum{3}
\afterpage{\noindent\fbox{\parbox{\dimexpr\textwidth-2\fboxsep-2\fboxrule\relax}{\lipsum[1]}}}
\fnlipsum{4}
\fnlipsum{5}
\fnlipsum{6}
\fnlipsum{7}
\fnlipsum{8}
\fnlipsum{9}
\fnlipsum{10}
\fnlipsum{11}
\fnlipsum{12}
\fnlipsum{13}
\end{document}

Note that this is a bit rough, but without a clear application perspective and some nice "real" examples it is hard to do significant testing.

The columns option sets the number of columns in the footer.

By giving the option fixorder=false, reordering of footnotes on odd pages is turned off. As the first footnotes on a page always go into the margin, on odd pages where the margin is to the left, the numerical order combined with the footer looks strange. So normally (default fixorder=true), all the footnotes are reordered on odd pages such that the first footnotes start in the footer.

Enjoy!

Update

Recent edits:

  1. Added support for oneside.
  2. Tested for conflicts with afterpage and fixed some issues.
  3. Tested for conflicts with \marginpar (which of course doesn't work at all) and disabled \marginpar for the time being. If I ever implement the vertical positioning of margin footnotes, I might add \marginpar back in as a non-numbered note.
  • I'd be interested in using this, but the initial goal was mostly that I saw this and thought, "Surely, there must be a way to do that with TeX, right?" :-) – raphink Apr 06 '12 at 06:22
  • Great job by the way! – raphink Apr 06 '12 at 06:22
  • @Raphink Thanks for the salutations. Could you explain which additional features you'd like to have? – Stephan Lehmke Apr 06 '12 at 06:31
  • I haven't thought much about it for now as I don't have a real life application right now (maybe a commented Bible at some point?). If it's already possible to do it, that's great. Looking forward to seeing the package. – raphink Apr 06 '12 at 07:04
  • i would try flowfram before going to all that trouble... – wasteofspace Apr 06 '12 at 10:44
  • 1
    @wasteofspace Could you be a bit more specific in which way flowfram is relevant for this? Please post an answer to achieve the results above with flowfram. – Stephan Lehmke Apr 06 '12 at 10:57
  • What’s with marginnotes? – Speravir Apr 06 '12 at 23:54
  • @Speravir At the time being, this is incompatible with anything going in the margin. If code for positioning margin footnotes will ever be implemented, then other margin-positioned material could be integrated. – Stephan Lehmke Apr 07 '12 at 05:16
  • 2
    Definitely a great answer to the question. I'm happy to give you the bounty, and looking forward to seeing the package on CTAN :-) – raphink Apr 07 '12 at 11:43
  • It was only because of what you wrote in point 3 regarding disabling \marginpar. – Speravir Apr 07 '12 at 21:31
  • @Speravir Understood. But \marginnote is not defined by the LaTeX kernel. I might add a warning if the package is loaded though. – Stephan Lehmke Apr 08 '12 at 02:18
  • @Raphink Thank you very much for awarding the bounty. I'll take that as motivation to implement the marginnote positioning after all. That way it may really become useful enough to go on CTAN. – Stephan Lehmke Apr 08 '12 at 02:20
  • 1
    Reconsidering it I also think, a general warning is the best, because it came in my mind, that there are some other packages, too, which put something into the margins (e. g. sidenotes, a command and an environment in pdfcomment, according to marginfix doc in memoir is a command \sidebar – surely there are more), but you can’t catch all cases. – Speravir Apr 08 '12 at 13:31
  • @Speravir Thank you for listing those. At least I can put some explaining text in the doc about incompatibilities. – Stephan Lehmke Apr 08 '12 at 14:30
  • This is wonderful! I'm looking for a package that would move all my footnotes and footcites to the right margin in a one-sided document, and let them overflow into the next page just like normal footnotes would. So I'm wondering whether it's possible to eliminate the footer, and let the notes flow over onto the next page directly instead? I'm hoping to be able to use this kind of layout for an online, open-access humanities journal. – Mårten Apr 23 '13 at 20:52
  • Sorry for spamming with comments, but: when I do onesided, the notes begin in the bottom margin, not in the right margin. I guess that it would be ideal with the notes beginning in the left margin, and then going in the bottom margin only as a last resort if they're still too long after overflowing into the second page? Because I guess the big problem with this layout as opposed to traditional footnotes is that the bottom margin can expand if needed to accommodate large footnotes, whereas that's more difficult here. – Mårten Apr 24 '13 at 03:35
  • @Mårten In a onesided document, all pages are "right" pages by default, so the right margin is the "outer" one, to be used for notes. As the layout produced is in some sense "n+1 columns", with n columns below and one (longer) column on the side, the flow can only be from the leftmost to the rightmost column. I think one could add some configuration for your needs, but maybe it would be better to pose a new question? On a long term perspective, I'm planning to make a package from this. – Stephan Lehmke Apr 24 '13 at 11:42
16

Disclaimer: I don't know anything about output routines. This is just meant to be a very partial first step, and the code is a mess. The idea is to collect the margin notes and the body content in two vertical boxes, check at every paragraph whether we've reached the area of the page (converted to a dimension by dividing it by 100pt, to remain within TeX's max dimension). If so, shipout a horizontal box with two parts: a left column with only notes, (\vsplit to \vsize), and a right column with all the body text (hence we assume that this body text fits, in other words that there are at least 1/3 of notes, no check for that), then two columns of notes side by side.

Also, that's plain TeX. Well, I'm not really using much of plain, even.

\catcode`@=11
\newbox\marg@m@galley % contains all marginpars
\newbox\marg@b@galley % contains all of the body text
\newbox\marg@void@box % empty box.
\newdimen\marg@m@area % marginpar surface area
\newdimen\marg@b@area % body surface area
\newdimen\marg@t@area % m+b surface area
\newdimen\marg@p@area % page surface area
\newdimen\marg@m@prevdepth \global\marg@m@prevdepth=-1000pt
\newdimen\marg@b@prevdepth \global\marg@b@prevdepth=-1000pt
\newdimen\marg@notes@space % space between body and bottom notes.
\marg@notes@space=15pt

\def\marg@leavevmode{\begingroup\everypar={}\unhbox\marg@void@box\endgroup}
\def\marg@strip@pt{\expandafter\marg@rem@pt\the}
\begingroup\catcode`P=12\catcode`T=12
  \lowercase{\endgroup\def\marg@rem@pt#1PT{#1}}

\def\marg@set@to@area#1#2{%
  #1=.01\dp#2\relax
  \advance#1by .01\ht#2\relax
  #1=\marg@strip@pt#1\wd#2\relax}
\def\marg@conditionally@output{%
  \marg@set@to@area\marg@m@area\marg@m@galley
  \marg@set@to@area\marg@b@area\marg@b@galley
  \marg@t@area\marg@m@area
  \advance\marg@t@area by \marg@b@area
  \marg@p@area=.0095\hsize
  \marg@p@area=\marg@strip@pt\marg@p@area\vsize
  \ifdim\marg@t@area>\marg@p@area
    \marg@output
  \fi}

\def\marg@output{%
  \shipout\hbox to \hsize{%
    \vbox to \vsize{\ifdim\ht\marg@m@galley>\vsize
      \vsplit\marg@m@galley to \vsize\else\unvbox\marg@m@galley\fi\vfill}%
    \hfill
    \vbox to \vsize{%
      \hsize\wd\marg@b@galley
      \dimen@\vsize
      \advance\dimen@ by -\ht\marg@b@galley
      \advance\dimen@ by -\dp\marg@b@galley
      \unvbox\marg@b@galley
      \vskip\marg@notes@space
      \hbox to \hsize {\vbox{\vsplit\marg@m@galley to \dimen@}%
        \hfil\vbox{\vsplit\marg@m@galley to \dimen@}}%
      \vfill
    }%
  }%
}

\def\marg@m@start{%
  \setbox\marg@m@galley=\vbox\bgroup
    \hsize=.30\hsize
    \unvbox\marg@m@galley
    \prevdepth=\marg@m@prevdepth
    \let\@par\par
    \def\par{\marg@m@stop\par\marg@m@start}}
\def\marg@m@stop{%
    \@par
    \global\marg@m@prevdepth=\prevdepth
  \egroup
  \marg@conditionally@output}

\def\marg@b@start{%
  \setbox\marg@b@galley=\vbox\bgroup
    \hsize=.65\hsize
    \unvbox\marg@b@galley
    \prevdepth=\marg@b@prevdepth
    \let\@par\par
    \def\par{\marg@b@stop\par\marg@b@start}}
\def\marg@b@stop{%
    \@par
    \global\marg@b@prevdepth=\prevdepth
  \egroup
  \marg@conditionally@output}

\long\def\marginpar#1{%
  \marg@b@stop
  \marg@m@start
  #1%
  \marg@m@stop
  \marg@b@start
}

\def\lipsum@i{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. 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.\par}

\emergencystretch=.15\hsize

\marg@b@start
  \lipsum@i
  \lipsum@i
  \marginpar{\lipsum@i\lipsum@i}
  \lipsum@i
  \marginpar{\lipsum@i\lipsum@i}
  \lipsum@i
\marg@b@stop
\marg@output

\bye
  • Very interesting! What is the point of changing the catcode for P and T? – raphink Oct 05 '11 at 09:39
  • 2
    @Raphink See the definition of \strip@pt in the LaTeX kernel. The result of \the\len (where \len is a dimension register, is a decimal number followed by the two characters pt of category 12. In order to strip them it's customary to define a macro with a delimited argument (the delimiter is exactly pt of category 12). – egreg Oct 05 '11 at 11:55
  • Thanks @egreg. In my case it's used to get a decimal number for TeX to do the multiplication of two dimensions. Where it becomes a mess is that I'm starting with .01 times the first dimension to avoid overflowing TeX's dimensions when doing the product. So very rough computations, but that seems to work in very trivial cases. Of course, the correct way would be to think a little bit and only compare the relevant heights. – Bruno Le Floch Oct 05 '11 at 12:15
8

This totally reminds me of the "Typesetting the talmud" challenges presented at the last Dante meeting in Leipzig. In the Talmud the original text version is in the center, around are (onion-like) the texts of scholars commenting on the text.

Talmud example

Uwe Ziegenhagen
  • 13,168
  • 5
  • 53
  • 93
  • 1
    This is not an answer to the OP's question -- but a comment can't include pictures (nice example BTW). Perhaps consider to make your "answer" community wiki. Another option would be to include the material at the end of the original question (with a note "EDIT by Uwe Ziegenhagen"). – lockstep Apr 07 '12 at 10:28
  • 1
    Uwe, @lockstep: You still can have a link to the image in a comment. – Martin Scharrer Apr 07 '12 at 12:48
  • 9
    Perhaps it could be made to a real answer by adding some value, like a link to the Talmud project, where one could get further information on this topic. – Stefan Kottwitz Apr 09 '12 at 09:22