Текст-заглушка внутри заметки на полях не продолжается на следующих страницах.

Текст-заглушка внутри заметки на полях не продолжается на следующих страницах.

Это мой маленький 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}

И на выходе получается,

введите описание изображения здесь

Почему фиктивный текст в примечании на полях не продолжается на следующих страницах?

решение1

Я ввожу это как другой ответ, поскольку он основан на подходе \vsplitи не имеет его недостатков paracol. Обратите внимание, что для вычисления расстояния до нижней части текстовой области требуется два запуска.

\marginflowиспользуется вместо \marginpar. \marginrepeatиспользуется только в \afterpage.

Интересно, что без всех этих \newpage«s» это займет всего 3 страницы.

\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}

решение2

Недостатком этого решения является то, что вы не можете просто вставить «примечание» в середину предложения или абзаца.

\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}

Это используется \everyparдля выполнения переключения в начале абзаца (с вертикальным смещением). Требуется два запуска, так как информация из \marginparхранится в файле aux. Ограничение — только один \marginparна абзац.

\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}

Связанный контент