欄外注内のダミーテキストは次のページに続きません

欄外注内のダミーテキストは次のページに続きません

これは私の小さな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。テキスト領域の下部までの距離を計算するには、2 回の実行が必要であることに注意してください。

\marginflowの代わりに が使用されます\marginpar\marginrepeatは でのみ使用されます\afterpage

興味深いことに、すべての\newpages がなければ、これは 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段落の先頭でスイッチを実行するために使用されます (垂直オフセット付き)。情報は\marginparaux ファイルに保存されるため、2 回実行する必要があります。制限は段落ごとに 1 回のみです\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}

関連情報