
Das ist mein kleines MWE,
\documentclass{book}
\usepackage{blindtext}
\usepackage{geometry}
\geometry{
includemp, % or include something else?
paper=a4paper,
marginparwidth=45mm
}
\begin{document}
Of course \marginpar{\blindtext[7]} \blindtext[7]
\end{document}
Und die Ausgabe ist,
Warum wird der Blindtext in der Randnotiz nicht auf den nächsten Seiten fortgesetzt?
Antwort1
Ich gebe dies als andere Antwort ein, da es auf dem Ansatz basiert \vsplit
und keinen der Nachteile aufweist paracol
. Beachten Sie, dass zwei Durchläufe erforderlich sind, um den Abstand zum unteren Rand des Textbereichs zu berechnen.
\marginflow
wird anstelle von verwendet \marginpar
. \marginrepeat
wird nur in verwendet \afterpage
.
Interessanterweise \newpage
reicht dies ohne die ganzen s nur für 3 Seiten.
\documentclass{book}
\usepackage[showframe]{geometry}
\geometry{
includemp, % or include something else?
paper=a4paper,
marginparwidth=45mm
}
\usepackage{afterpage}
\usepackage{tikzpagenodes}
\newlength{\bottom}
\newsavebox{\marginparbox}
\newcommand{\marginflow}[1]% #1 = text
{\strut\tikz[remember picture,overlay]% compute distance to bottom of text area
{\pgfextracty{\bottom}{\pgfpointdiff{\pgfpointanchor{current page text area}{south}}{\pgfpointorigin}}%
\global\bottom=\bottom}%
\advance\bottom by 0.4\baselineskip
\parbox{\marginparwidth}{\global\setbox\marginparbox=\vbox{#1}}%
\ifdim\bottom>\dimexpr\ht\marginparbox+\dp\marginparbox\relax
\marginpar{\raisebox{\dimexpr 0.6\baselineskip-\height}{\usebox{\marginparbox}}}%
\else
\setbox1=\vsplit\marginparbox to \bottom
\marginpar{\raisebox{\dimexpr 0.6\baselineskip-\height}{\usebox1}}%
\ifdim\ht\marginparbox>-\dp\marginparbox
\afterpage{\marginrepeat}%
\fi
\fi\ignorespaces}
\newcommand{\marginrepeat}{\vspace*{-\baselineskip}%
\ifdim\textheight>\dimexpr\ht\marginparbox+\dp\marginparbox\relax
\marginpar{\raisebox{\dimexpr 0.6\baselineskip-\height}{\usebox{\marginparbox}}}%
\else
\setbox1=\vsplit\marginparbox to \textheight
\marginpar{\raisebox{\dimexpr 0.6\baselineskip-\height}{\usebox1}}%
\ifdim\ht\marginparbox>-\dp\marginparbox
\afterpage{\marginrepeat}%
\fi
\fi}
\usepackage{blindtext}
\begin{document}
So here I am going on and on about absolutely nothing when I happen to mention something which I want to
describe in the margins HERE \marginflow{\blindtext[7]} then continue as if nothing had happened.
\null\newpage
\null\newpage
\null\newpage
\null\newpage
\null\newpage
\end{document}
Antwort2
Der Nachteil dieser Lösung besteht darin, dass Sie die „Notiz“ nicht einfach mitten in einen Satz oder Absatz einfügen können.
\documentclass{book}
\usepackage[showframe]{geometry}
\geometry{
includemp, % or include something else?
paper=a4paper,
textwidth=418.25368pt,% \the\dimexpr \textwidth+\marginparsep+\marginparwidth\relax
marginparsep=0pt,
marginparwidth=0pt
}
\usepackage{paracol}
\setcolumnwidth{\dimexpr \textwidth-45mm-\columnsep\relax,45mm}
\twosided
\usepackage{blindtext}
\begin{document}
\begin{paracol}{2}
Of course
\switchcolumn*\blindtext[7]\switchcolumn
as I was saying
\end{paracol}
\end{document}
Dies führt \everypar
den Wechsel am Anfang des Absatzes durch (mit vertikalem Versatz). Es sind zwei Durchläufe erforderlich, da die Informationen \marginpar
in der AUX-Datei gespeichert sind. Die Beschränkung liegt bei nur einem Durchlauf \marginpar
pro Absatz.
\documentclass{book}
\usepackage[showframe]{geometry}
\geometry{
includemp, % or include something else?
paper=a4paper,
textwidth=418.25368pt,% \the\dimexpr \textwidth+\marginparsep+\marginparwidth\relax
marginparsep=0pt,
marginparwidth=0pt
}
\usepackage{paracol}
\setcolumnwidth{\dimexpr \textwidth-45mm-\columnsep\relax,45mm}
\twosided
\makeatletter
\newcounter{absparagraph}
\newlength{\marginpar@offset}
\newif\ifmarginpar
\newif\ifrepeatpar
\newcommand{\newparagraph}[2]% #1 = pragraph, #2 = y location
{\expandafter\gdef\csname paragraph@#1\endcsname{#2}}
\newcommand{\newmarginpar}[3]% #1 = pragraph, #2 = y location, #3 = text
{\expandafter\gdef\csname marginpar@y@#1\endcsname{#2}%
\expandafter\gdef\csname marginpar@text@#1\endcsname{#3}}
\renewcommand{\marginpar}[1]% #1=text
{\pdfsavepos
\protected@write\@auxout{}{\string\newmarginpar{\theabs@paragraph}%
{\noexpand\number\pdflastypos}{#1}}\ignorespaces}%
\newcommand{\AtBeginParagraph}{\ifmarginpar\else
\ifrepeatpar\repeatparfalse
\else
\stepcounter{absparagraph}%
\xdef\theabs@paragraph{\theabsparagraph}%
\strut\pdfsavepos
\protected@write\@auxout{}{\string\newparagraph{\theabs@paragraph}%
{\noexpand\number\pdflastypos}}%
\@ifundefined{paragraph@\theabs@paragraph}{}{%
\@ifundefined{marginpar@text@\theabs@paragraph}{}{%
\global\marginpar@offset=\csname paragraph@\theabs@paragraph\endcsname sp\relax
\global\advance\marginpar@offset by -\csname marginpar@y@\theabs@paragraph\endcsname sp\relax
\vspace{-\baselineskip}%
\marginpartrue
\switchcolumn*
\vspace*{\marginpar@offset}\csname marginpar@text@\theabs@paragraph\endcsname
\switchcolumn
\marginparfalse\repeatpartrue}}%
\fi
\fi}
\makeatother
\AtBeginDocument{\everypar{\AtBeginParagraph}}
\usepackage{blindtext}
\begin{document}
\begin{paracol}{2}
So here I am going on and on about absolutely nothing when I happen do mention somtehing to which I want to
describe in the margins HERE \marginpar{\blindtext[7]} then continue as if nothing had happened.
\end{paracol}
\end{document}