Skip to content

如何在每一章的指定位置插入边注 #317

@ROGERDJQ

Description

@ROGERDJQ

检查清单

  • 我已在 issues 中进行搜索(包括已关闭的问题)

操作系统

windows10, overleaf

TeX 发行版

TeXlive 2021

描述问题

描述出现的情况

最近在做一个义务排版,是想实现边注的效果。主要是希望实现几个内容:

  1. 实现margin note, 但边注是在每章指定的位置开始top-bottom 依次排列,而不是像marginpar/marginnote那样贴在对应行附近。默认每章有一个起点【因为章首页的首段不是在页面的最上方】
  2. 跨页的边注自动续到下一页。
  3. 支持two side设定。
  4. 本页的边注最好在本页出现。
  5. 边注之间可设置间隔。
  6. 可在正文或边注中插入图片
  7. 边注有note marker,并且在正文中marker 是上标,在边注中是正常大小。

给出您解决问题所进行的尝试

  1. memoir。 发现memoir的sidefootnote非常好用,尝试了下可以满足2,3,5。功能4可能也默认实现了。功能7也可以修改。但是功能1不能实现,默认的sidefootnote是bottom up排列。也没有办法设置起点。 【问题是如何使用memoir中的sidefootnote,但是让其是top down而不是bottom up,并且每章可以设置一个起始高度间隔。】
  2. https://tex.stackexchange.com/questions/70312/how-can-i-replace-footnotes-for-non-floating-marginal-notes?noredirect=1&lq=1 提供了一个方案,是利用了一个新的box ftbox将footin的内容装进去,然后重新排版outpubox和ftbox。这个默认的代码就可以实现1,2,3。功能4看起来也实现了,但我看不懂是怎么实现的,代码中也没有显式的写。功能5我通过加vspace满足了,功能7 也满足了。但是有两个问题,一个功能6在正文中插入图片会导致整个格式都错乱,甚至超出页面范围。 一个是边注区域要么下面不满,或者上面超出正文一点点。【问题是怎么在正文中正常插入图片,改善下边注排满和上面超出的问题。】

给出复现步骤

  1. https://www.overleaf.com/1752198231rgbhcypjqzdr#abdf2f 【memoir实现】
  2. https://www.overleaf.com/8475689682twsnbthvkqsn#4406f7 【方法2,问题出现在第2,3,4页】

最小工作示例(MWE)

  • memoir实现
\documentclass[book]{memoir}
% \let\subsection\section % undo article option change of divisions
% \let\section\chapter    % ditto
\usepackage{mwe}
\usepackage{lipsum}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{wrapfig}
\usepackage{xcolor}
\usepackage{xeCJK}
\sidefootmarkstyle{{\color{red}{{#1}}:} }
\begin{document}
\section{First}
中英文皆可以混排。 sssss這是繁體中文。
\lipsum[2]

Some sidefootnoted text.\sidefootnote{Margined footnote.
{\includegraphics[width=0.77\sidefootwidth]{example-image}
    \captionof{figure}{This is a test case.}
    }}

\lipsum[4]

Some sidefootnoted textSome sidefootnoted textSome sidefootnoted textSome sidefootnoted text.\sidefootnote{\lipsum[1-3]}Some sidefootnoted textSome sidefootnoted textSome sidefootnoted textSome sidefootnoted text.

\par\begin{wrapfigure}{r}{0.55\textwidth}
    \centering\vspace{-\baselineskip}
    \includegraphics[width=0.25\textwidth]{example-image}
    \caption{SSS}
\end{wrapfigure} 

\begin{figure}[h]
    \centering
    \includegraphics[width=0.25\textwidth]{example-image}
    \caption{new img}
\end{figure} 
\lipsum[1-3] 

\end{document}
  • 方法2 实现
\documentclass[twoside]{ctexbook}
 \usepackage[%
    a4paper,
    left=2cm,
    textheight=14cm,
    textwidth=10cm,
    paperheight=18cm,
    marginparsep=0.5cm,
    marginparwidth=7cm
    ]{geometry}
\usepackage{lipsum}
\usepackage{zhlipsum}
\usepackage{mwe}
\setlength{\footnotesep}{5\baselineskip}
\usepackage{xcolor}
\usepackage{caption}

\newbox\ftbox
\setbox\ftbox\vbox{}  %

  \makeatletter
\long\def\@footnotetext#1{%
  \global\setbox\ftbox\vbox{%
    \unvbox\ftbox

    \reset@font\footnotesize
    \hsize\marginparwidth \@parboxrestore
    \interlinepenalty 50
    \splitmaxdepth \dp\strutbox  \floatingpenalty \@MM
    \protected@edef\@currentlabel{%
      \csname p@footnote\endcsname\@thefnmark
    }
    % \vspace{1pt}
    \color@begingroup
    \@makefntext{%
      #1 
      \@finalstrut\strutbox
    }%
    \color@endgroup
  }%
}
    %  ftbox保存所有的footnotes
    
% 
\gdef\@makecol{%
  \ifvoid\footins
    \setbox\@outputbox\box\@cclv
  \else
    \setbox\@outputbox\vbox{%
      \boxmaxdepth\@maxdepth
      \unvbox\@cclv
      \vskip\skip\footins
      \color@begingroup
        \normalcolor
        \footnoterule
        \unvbox\footins
      \color@endgroup
    }%
  \fi
   %  有脚注,就解包cclv再合并footins, 没有脚注,就直接设置为cclv,主要设置了outputbox的内容 
   % 前面设置了一个ftbox 放脚注, 这里又有了一个outputbox 放 正文和脚注
  \global\setbox\@ne\vbox{\vsplit\ftbox to\textheight}
  %  这里是切成list还是只是去了第一段呢?剩下的怎么办? 只切了第一段,剩下的还在ftbox中
  % 按照textheight切怎么保证每一页的注释能出现在每一页该在的那一页呢?footnote怎么保证是对应页数的?
  
  \if@twoside\ifodd\c@page
    \setbox\@outputbox\vbox{%
      \hbox{
        \box\@outputbox
        \rlap{\kern\marginparsep\box\@ne}
      }
    }%
  \else
    \setbox\@outputbox\vbox{%
      \hbox{\llap{\box\@ne\kern\marginparsep}\box\@outputbox}
    }%
  \fi
  \else
    \setbox\@outputbox\vbox{%
      \hbox{\box\@outputbox\rlap{\kern\marginparsep\box\@ne}}
    }%
  \fi
  % 又设置了一遍outputbox里面的内容,似乎\box用完一遍里面就清空了,但是outputbox不是已经有脚注在内了吗?
  \let\@elt\relax
  \xdef\@freelist{\@freelist\@midlist}%
  \global\let\@midlist\@empty
  \@combinefloats
  %  看起来无关的一段
  \ifvbox\@kludgeins
    \@makespecialcolbox
  \else
    \setbox\@outputbox\vbox to \@colht{%
      \@texttop
      \dimen@\dp\@outputbox
      \unvbox\@outputbox
      \vskip-\dimen@
      \@textbottom
    }%
  \fi
  % 又set outbox?但是设置0.5\@colht 也没有看到改变,怎么调整高度?
  % 到底在哪里打印的呢?每一页执行一次吗?
  
  \global\maxdepth\@maxdepth
}
\makeatother

 \usepackage{wrapfig}
\usepackage{graphicx}

\begin{document}
\chapter{sss1}
\setbox\ftbox\vbox{\vspace{145pt}}
每建马先口住月大,究平克满现易手,省否何安苏京。两今此叫证程事元七调联派业你,全它精据间属医拒严力步青。厂江
内立拉清义边指,况半严回和得话,状整度易芬列。再根心应得信飞住清增,至例联集采家同严热,地手蠢持查受立询。统
定发几满斯究后参边增消与内关,解系之展习历李还也村酸。制周心值示前她志长步反,和果使标电再主它这,即务解旱八
战根交。是中文之象万影报头,与劳工许格主部确,受经更奇小极准。形程记持件志各质天因时,据据极清总命所风式,气
太束书家秀低坟也。期之才引战对已公派及济,间究办儿转情革统将,周类弦具调除声坑。两了济素料切要压,光采用级数
本形,管县任其坚。切易表候完铁今断土马他,领先往样拉口重把处千,把证建后苍交码院眼。较片的集节片合构进,入化
发形机已斯我候,解肃飞口严。技时长次土员况属写,器始维期质离色,个至村单原否易。重铁
\begin{figure}[h!]
    \centering % 表示居中
    \includegraphics[width=4.5cm,height=5cm]{example-image}
    \caption{test} \label{sample-figure}
	\end{figure}
看年程第则于去,且它后基格并下,每收感石形步而

每建马先\footnote{\zhlipsum[1]}口住月大,究平克满现易手,省否何安苏京。两今此叫证程事元七调联派业你,全它精据间属医拒严力步青。厂江内立拉清义边指,况半严回和得话,状整度易芬列。再根心应得信飞住清增,至例联集采家同严热,地手蠢持查受立询。统定发几满斯究后参边增消与内关,解系之展习历李还也村酸。制周心值示前她志长步反,和果使标电再主它这,即务解旱八战根交。是中文之象万影报头\footnote{\zhlipsum[1]},与劳工许格主部确,受经更奇小极准。形程记持件志各质天因时,据据极清总命所风式,气太束书家秀低坟也。期之才引战对已公派及济,间究办儿转情革统将,周类弦具调除声坑。两了济素料切要压,光采用级数本形,管县任其 \zhlipsum[1] \footnote{\zhlipsum[1]}坚。切易表候完铁今断土马他,领先往样拉口重把处千,把证建后苍交码院眼。较片的集节片合构进,入化发形机已斯我候,解肃飞口严。技时长次土员况属写,器始维期质离色,个至村单原否易。重铁看年程第则于去,且它后基格并下,每收感石形步而

水厂共当而面三张,白家决空给意层般,单重总歼者新。每建马先口住月大,究平克满现易手,省否何安苏京。两今此
叫证程事元七调\par\begin{wrapfigure}[4]{r}{0.5\textwidth}
    \centering\vspace{-\baselineskip}
    \includegraphics[width=0.25\textwidth]{example-image}
    \caption{SSS}
\end{wrapfigure} 联派业你,全它精据间属医拒严力步青。厂江内立拉清义边指,况半严回和得话,状整度易芬列。再根心应
得信飞住清增,至例联集采家同严热,地手蠢持查受立询。统定发几满斯究后参边增消与内关,解系之展习历李还也村酸。
制周心值示前她志长步反,和果使标电再主它这,即务解旱八战根交。是中文之象万影报头\footnote{\zhlipsum[1-2]},与劳工许格主部确,受经更奇水厂共当而面三张,白家决空给意层般,单重总歼者新。\footnote{\zhlipsum[1]}每建马先口住月大,究平克满现易手,省否何安苏京。两今此叫证程事元七调联派业你,全它精据间属医拒严力步青。厂江内立拉清义边指,况半严回和得话,状整度易芬列。再根心应得信飞住清增,至例联集采家同严热,地手蠢持查受立询。统定发几满斯究后参边增消与内关,解系之展习历李还也村酸。制周心值示前她志长步反,和果使标电再主它这,即务解旱八
战根交。是中文之象万影报头\footnote{\zhlipsum[1]},与劳工许格主部确,受经更奇小极准。形程记持件志各质天因时,据据极清总命所风式,气太束书家秀低坟也。期之才引战对已公派及济,间究办儿转情革统将,周类弦具调除声坑。两了济素料切要压,光采用级数本形,管县任其坚。切易表候完铁今断土马他,领先往样拉口重把处千,把证建后苍交码院眼。较片集节片合构进,入化发形机已斯我候,解肃飞口严。技时长次土员况属写,器始维期质离色,个至村单原否易。重铁看年程第则于去,且它后基格并下,每收感石形步而

水厂共当而面三张,白家决空给意层般,单重总歼者新。每建马先口住月大,究平克满现易手,省否何安苏京。两今此叫证程事元七调联派业你,全它精据间属医拒严力步青。厂江内立拉清义边指,况半严回和得话,状整度易芬列。再根心应得信飞住清增,至例联集采家同严热,地手蠢持查受立询。统定发几满斯究后参边增消与内关,解系之展习历李还也村酸。制周心值示前她志长步反,和果使标电再主它这,即务解旱八战根交。是中文之象万影报头\footnote{\zhlipsum[1-2]},与劳工许主部确,受经更奇

\zhlipsum[1]

水厂共当而面三张,白家决空给意层般,单重总歼者新。每建马先口住月大,究平克满现易手,省否何安苏京。两今此
叫证程事元七调联派业你,全它精据间属医拒严力步青。厂江内立拉清义边指,况半严\begin{figure}[h!]
    \centering % 表示居中
    \includegraphics[width=2cm,height=5cm]{example-image}
    \caption{test} \label{sample-figure}
	\end{figure}回和得话,状整度易芬列。再根心应得信飞住清增,至例联集采家同严热,地手蠢持查受立询。统定发几满斯究后参边增消与内关,解系之展习历李还也村酸。制周心值示前她志长步反,和果使标电再主它这,即务解旱八战根交。是中文之象万影报头\footnote{\zhlipsum[1-2]\includegraphics[width=0.77\linewidth]{example-image}
    \captionof{figure}{This is a test case.}
    \label{fig:test}},与劳工许格主部确,受经更奇

\end{document}

用 XeLaTeX 编译后,日志文件输出【请见附件】

链接

其他信息

我还做了这些尝试:

  1. marginnote, marginpar都是贴在对应行的边注,而不是top down依次排列的边注;而且有时候边注之间还会重叠,需要手动调节offset,而且也没有counter计数边注,整个功能不是很对应marginnote/marginpar的初衷。
  2. footmisc有一个side选项,但是查看了文档后发现是套用marginpar实现的。
  3. https://tex.stackexchange.com/questions/69517/send-and-stack-marginpar-to-the-top-or-the-bottom-of-the-page 提供了一套方案,但是不满足“跨页的边注会自动续到下一页”,也不支持two-side。
  4. paracol, 这种随时随地 能切换multi col和单栏的设定很好,但是考虑到把单独 的一栏都用来放边注,而且还要对齐,还要设置counter计数,感觉和paracol的设计也对不上。
  5. Tufte-LATEX, 它 的边注好用,但是边注之间的offset要自己调节,默认还是贴在对应行的边注。

附件

log.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions