4

Under plain LaTeX with twoside option, I use \leavevmode\marginpar{#1} at the beginning of a paragraph to obtain top-aligned margin notes. Immediately after a pagebreak the margin note may or may not appear on the wrong side.

Related questions have been asked before, but no compelling answer was given; for instance, a hack was proposed that requires pdflatex extensions.

So in case there is really no fix for this problem, then at least I would like to understand why LaTeX's \marginpar fails and cannot be improved.

Working example:

\documentclass[11pt,a5paper,twoside]{report}

\usepackage{polyglossia}
\setdefaultlanguage[spelling=new,babelshorthands=true]{german}

\def\baselinestretch{1.07}
\topmargin -2.3cm
\textheight 16.6cm

\newdimen\pagewidth\pagewidth=14.8650889cm
\hoffset -1in
\advance\hoffset by 1.2cm
\marginparsep 0.5cm
\marginparwidth 1.cm
\advance\hoffset by 0.5\marginparwidth
\evensidemargin 0.5\marginparwidth
\oddsidemargin  \marginparwidth
\advance\evensidemargin by \marginparsep
\textwidth 11cm

\parindent 0pt
\parskip .8\baselineskip plus .3\baselineskip minus .2\baselineskip

\def\MP#1{\pagebreak[3]\leavevmode\marginpar{#1}}

\begin{document}
\mag 1414
\flushbottom

\MP{I.}%
Saget, Steine, mir an, o sprecht, ihr hohen Paläste!
   Straßen, redet ein Wort! Genius, regst du dich nicht?

Ja, es ist alles beseelt in deinen heiligen Mauern,
   Ewige Roma; nur mir schweiget noch alles so still.

O wer flüstert mir zu, an welchem Fenster erblick ich
   Einst das holde Geschöpf, das mich versengt und erquickt?

Ahn’ ich die Wege noch nicht, durch die ich immer und immer,
   Zu ihr und von ihr zu gehn, opfre die köstliche Zeit?

Noch betracht’ ich Kirch’ und Palast, Ruinen und Säulen,
   Wie ein bedächtiger Mann schicklich die Reise benutzt.

Doch bald ist es vorbei; dann wird ein einziger Tempel,
   Amors Tempel nur sein, der den Geweihten empfängt.

Eine Welt zwar bist du, o Rom; doch ohne die Liebe
   Wäre die Welt nicht die Welt, wäre denn Rom auch nicht Rom.

\MP{II.}%
Ehret, wen ihr auch wollt! Nun bin ich endlich geborgen!
   Schöne Damen und ihr, Herren der feineren Welt;

Fraget nach Oheim und Vettern und alten Muhmen und Tanten;
   Und dem gebundnen Gespräch folge das traurige Spiel.

Auch ihr übrigen fahret mir wohl, in großen und kleinen
   Zirkeln, die ihr mich oft nah der Verzweiflung gebracht,

Wiederholet, politisch und zwecklos, jegliche Meinung,
   Die den Wandrer mit Wut über Europa verfolgt.

So verfolgte das Liedchen Malbrough den reisenden Briten
   Einst von Paris nach Livorn, dann von Livorno nach Rom,

\MP{III.}%
Laß dich, Geliebte, nicht reun, daß du mir so schnell dich ergeben!
   Glaub’ es, ich denke nicht frech, denke nicht niedrig von dir.

Vielfach wirken die Pfeile des Amor: einige ritzen,
   Und vom schleichenden Gift kranket auf Jahre das Herz.

\MP{IV.}%
Fromm sind wir Liebende, still verehren wir alle Dämonen,
   Wünschen uns jeglichen Gott, jegliche Göttin geneigt.

Und so gleichen wir euch, o römische Sieger! Den Göttern
   Aller Völker der Welt bietet ihr Wohnungen an,

\end{document}

generates the following page 2:

enter image description here

6

The problem is that when LaTeX constructs the margin note "III", it chooses side based on the page counter which still contains 1 (LaTeX usually collects more material than fits one page before inserting a pagebreak). The only reliable way to get page number of an object is to use a label. So the following code puts a label at the beginning of the paragraph with margin note and then checks if the page number for this label is odd or even. If it's odd then it places marginpar to the right, if it's even then to the left. As with any other label use, the document has to be compiled twice.

\documentclass[11pt,a5paper,twoside]{report}

\usepackage{polyglossia}
\setdefaultlanguage[spelling=new,babelshorthands=true]{german}

\def\baselinestretch{1.07}
\topmargin -2.3cm
\textheight 16.6cm

\newdimen\pagewidth\pagewidth=14.8650889cm
\hoffset -1in
\advance\hoffset by 1.2cm
\marginparsep 0.5cm
\marginparwidth 1.cm
\advance\hoffset by 0.5\marginparwidth
\evensidemargin 0.5\marginparwidth
\oddsidemargin  \marginparwidth
\advance\evensidemargin by \marginparsep
\textwidth 11cm

\parindent 0pt
\parskip .8\baselineskip plus .3\baselineskip minus .2\baselineskip

\usepackage{ifthen}
\usepackage{refcount}

\makeatletter
\@mparswitchfalse
\newcounter{mpcount}
\def\MP#1{%
\pagebreak[3]%
\leavevmode
\stepcounter{mpcount}%
\label{marginpar\the\c@mpcount}%
\ifthenelse{\isodd{\getpagerefnumber{marginpar\the\c@mpcount}}}{%
  \normalmarginpar
  \marginpar{#1}%
  }{%
  \reversemarginpar
  \marginpar{#1}%
}}
\makeatother

\begin{document}
\mag 1414
\flushbottom

\MP{I.}%
Saget, Steine, mir an, o sprecht, ihr hohen Paläste!
   Straßen, redet ein Wort! Genius, regst du dich nicht?

Ja, es ist alles beseelt in deinen heiligen Mauern,
   Ewige Roma; nur mir schweiget noch alles so still.

O wer flüstert mir zu, an welchem Fenster erblick ich
   Einst das holde Geschöpf, das mich versengt und erquickt?

Ahn’ ich die Wege noch nicht, durch die ich immer und immer,
   Zu ihr und von ihr zu gehn, opfre die köstliche Zeit?

Noch betracht’ ich Kirch’ und Palast, Ruinen und Säulen,
   Wie ein bedächtiger Mann schicklich die Reise benutzt.

Doch bald ist es vorbei; dann wird ein einziger Tempel,
   Amors Tempel nur sein, der den Geweihten empfängt.

Eine Welt zwar bist du, o Rom; doch ohne die Liebe
   Wäre die Welt nicht die Welt, wäre denn Rom auch nicht Rom.

\MP{II.}%
Ehret, wen ihr auch wollt! Nun bin ich endlich geborgen!
   Schöne Damen und ihr, Herren der feineren Welt;

Fraget nach Oheim und Vettern und alten Muhmen und Tanten;
   Und dem gebundnen Gespräch folge das traurige Spiel.

Auch ihr übrigen fahret mir wohl, in großen und kleinen
   Zirkeln, die ihr mich oft nah der Verzweiflung gebracht,

Wiederholet, politisch und zwecklos, jegliche Meinung,
   Die den Wandrer mit Wut über Europa verfolgt.

So verfolgte das Liedchen Malbrough den reisenden Briten
   Einst von Paris nach Livorn, dann von Livorno nach Rom,

\MP{III.}%
Laß dich, Geliebte, nicht reun, daß du mir so schnell dich ergeben!
   Glaub’ es, ich denke nicht frech, denke nicht niedrig von dir.

Vielfach wirken die Pfeile des Amor: einige ritzen,
   Und vom schleichenden Gift kranket auf Jahre das Herz.

\MP{IV.}%
Fromm sind wir Liebende, still verehren wir alle Dämonen,
   Wünschen uns jeglichen Gott, jegliche Göttin geneigt.

Und so gleichen wir euch, o römische Sieger! Den Göttern
   Aller Völker der Welt bietet ihr Wohnungen an,

\end{document}

enter image description here

  • Thanks, Sergei. I applied your solution to my not so minimal real application, and it works correctly for the first margin on each page. But then it happens that the second margin lands on the wrong side... – Joachim W Aug 2 at 10:27
  • Hm. Might it be that the margin text is the same for different marginpars? – Sergei Golovan Aug 2 at 10:33
  • Try the edited version. I've changed the label names to a unique sequence. – Sergei Golovan Aug 2 at 10:43
  • Still fails, sometimes for the first, sometimes for the second margin note – Joachim W Aug 2 at 10:49
  • Have you compiled the document twice, or thrice, until there's no warning about cross-references? – Sergei Golovan Aug 2 at 10:52
2

This is equivalent to Golovan's solution, but uses the ifoddpage package to simplify the coding.

\documentclass[11pt,a5paper,twoside]{report}

\usepackage{polyglossia}
\setdefaultlanguage[spelling=new,babelshorthands=true]{german}

\def\baselinestretch{1.07}
\topmargin -2.3cm
\textheight 16.6cm

\newdimen\pagewidth\pagewidth=14.8650889cm
\hoffset -1in
\advance\hoffset by 1.2cm
\marginparsep 0.5cm
\marginparwidth 1.cm
\advance\hoffset by 0.5\marginparwidth
\evensidemargin 0.5\marginparwidth
\oddsidemargin  \marginparwidth
\advance\evensidemargin by \marginparsep
\textwidth 11cm

\parindent 0pt
\parskip .8\baselineskip plus .3\baselineskip minus .2\baselineskip

\usepackage{ifoddpage}
\makeatletter
\def\MP#1{\pagebreak[3]\leavevmode\checkoddpage
  \ifnum\oddpage@page=\value{page}\normalmarginpar
  \else\reversemarginpar
  \fi
  \marginpar{#1}}
\makeatother

\begin{document}
\mag 1414
\flushbottom

\MP{I.}%
Saget, Steine, mir an, o sprecht, ihr hohen Paläste!
   Straßen, redet ein Wort! Genius, regst du dich nicht?

Ja, es ist alles beseelt in deinen heiligen Mauern,
   Ewige Roma; nur mir schweiget noch alles so still.

O wer flüstert mir zu, an welchem Fenster erblick ich
   Einst das holde Geschöpf, das mich versengt und erquickt?

Ahn’ ich die Wege noch nicht, durch die ich immer und immer,
   Zu ihr und von ihr zu gehn, opfre die köstliche Zeit?

Noch betracht’ ich Kirch’ und Palast, Ruinen und Säulen,
   Wie ein bedächtiger Mann schicklich die Reise benutzt.

Doch bald ist es vorbei; dann wird ein einziger Tempel,
   Amors Tempel nur sein, der den Geweihten empfängt.

Eine Welt zwar bist du, o Rom; doch ohne die Liebe
   Wäre die Welt nicht die Welt, wäre denn Rom auch nicht Rom.

\MP{II.}%
Ehret, wen ihr auch wollt! Nun bin ich endlich geborgen!
   Schöne Damen und ihr, Herren der feineren Welt;

Fraget nach Oheim und Vettern und alten Muhmen und Tanten;
   Und dem gebundnen Gespräch folge das traurige Spiel.

Auch ihr übrigen fahret mir wohl, in großen und kleinen
   Zirkeln, die ihr mich oft nah der Verzweiflung gebracht,

Wiederholet, politisch und zwecklos, jegliche Meinung,
   Die den Wandrer mit Wut über Europa verfolgt.

So verfolgte das Liedchen Malbrough den reisenden Briten
   Einst von Paris nach Livorn, dann von Livorno nach Rom,

\MP{III.}%
Laß dich, Geliebte, nicht reun, daß du mir so schnell dich ergeben!
   Glaub’ es, ich denke nicht frech, denke nicht niedrig von dir.

Vielfach wirken die Pfeile des Amor: einige ritzen,
   Und vom schleichenden Gift kranket auf Jahre das Herz.

\MP{IV.}%
Fromm sind wir Liebende, still verehren wir alle Dämonen,
   Wünschen uns jeglichen Gott, jegliche Göttin geneigt.

Und so gleichen wir euch, o römische Sieger! Den Göttern
   Aller Völker der Welt bietet ihr Wohnungen an,

\end{document}
  • I also tried this one with my real application: it fails for certain margin notes. – Joachim W Aug 2 at 21:21
  • Did you run it twice? – John Kormylo Aug 3 at 14:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.