自动将超出页面边框的边注移至下一页

自动将超出页面边框的边注移至下一页

我正在写论文经典论文。它定义了边注的 \graffito 命令如下:

% Graffiti as in GKP's book "Concrete Mathematics"
% thanks to Lorenzo Pantieri and Enrico Gregorio
\def\graffito@setup{%
    %   \slshape\footnotesize% this was due to \slhape in above book
    \itshape\footnotesize\leavevmode\color{Black}%
    \parindent=0pt \lineskip=0pt \lineskiplimit=0pt %
    \tolerance=2000 \hyphenpenalty=300 \exhyphenpenalty=300%
    \doublehyphendemerits=100000%
    \finalhyphendemerits=\doublehyphendemerits}
%\DeclareRobustCommand{\graffito}[1]{\marginpar%
% [\graffito@setup\raggedleft\hspace{0pt}{#1}]%
% {\graffito@setup\raggedright\hspace{0pt}{#1}}}

\RequirePackage{mparhack} % get marginpar right

\let\oldmarginpar\marginpar
\renewcommand{\marginpar}[2][]{% always add optional parameter, make it empty by default
   \if\relax\detokenize{#1}\relax% optional parameter empty, in all normal document calls
      \oldmarginpar[\graffito@setup\raggedleft\hspace{0pt}{#2}]{\graffito@setup\raggedright\hspace{0pt}#2}%
   \else%two parameters, let them use their styling
      \oldmarginpar[{#1}]{#2}%
   \fi%
}

并且我在顶部添加了 \graffitox 以包含可选的垂直偏移(原始线程:将默认参数包含到 \def 中,代码采用自用户 egreg):

\makeatletter
\usepackage{suffix}
\newcommand{\graffitox}[1]{%
    \marginpar
    [\graffitox@setup{\graffitooffset}\raggedleft\hspace{0pt}#1]
    {\graffitox@setup{\graffitooffset}\raggedright\hspace{0pt}#1}%
}
\WithSuffix\newcommand\graffitox*[1]{%
    \marginpar
    [\graffitox@setup{\graffitoaftercaptionoffset}\raggedleft\hspace{0pt}#1]
    {\graffitox@setup{\graffitoaftercaptionoffset}\raggedright\hspace{0pt}#1}%
}
\newcommand\graffitox@setup[1]{%
    \vspace{#1}%
    \parindent=0pt \lineskip=0pt \lineskiplimit=0pt
    \tolerance=2000 \hyphenpenalty=300 \exhyphenpenalty=300
    \doublehyphendemerits=100000
    \finalhyphendemerits=\doublehyphendemerits
    \itshape\footnotesize
    \leavevmode\color{black} %
}
\makeatother

我在段落开头插入了边注,但对于长度超过一行的边注,有时会出现边注超出正文的情况:

在此处输入图片描述

如果注释很短,这种情况还不算太糟,但对于较长的注释来说,这种情况就很不吸引人了。因此,我手动检查每条注释,并在“\graffitox”命令前插入“\clearpage”以将整个段落移至下一页。但是,每当整个文档中发生更改时,这都需要相当多的手动工作。

这个过程可以自动化吗?例如:如果边注比该页面上的段落部分长,则将“\graffitox{...}”替换为“\clearpage\graffitox{...}”?我很感激任何有助于实现这一点的帮助 - 我现在的问题是获取计算的测量值(到正文结束的剩余垂直空间、边注所需的垂直空间等)。

如果能找到一个可以包装到 \graffitox 命令中的解决方案就太好了,这样我就不用对整个论文进行重大更改了。

答案1

本质上,graffitox宏使用标准 LaTeX\marginpar命令来设置注释。如果注释的位置对于页面来说太长,它只会继续排版,就像您的示例中那样。

我想你可以将纸条放在一个盒子里并测量它的高度,将其与页面上剩余的空间进行比较,然后执行一些操作并输出纸条。

我知道您会手动检查输出,如果注释太长,请将段落文本和注释移至下一页。您是否考虑过在注释前添加一些负垂直空间,例如\vspace{-2\baselineskip}不移动段落文本?

如果您有许多长边注,该memoir课程将包含一个\sidebar插入边注的命令,从页面顶部开始,但如果边注对于当前页面来说太长,则继续到下一页。

相关内容