我有一份双面文档,页边距较大,数字延伸到页边距。我想设置边注/旁注,要求如下:
- 来自 sidenotes 包的上标数字
- raggedoutside 类似于 marginnote 包,即根据注释出现的位置,它是 raggedleft(偶数)或 raggedright(奇数)
- 注释不应超出图的范围。目前这是通过
marginparwidth
的设置定义的geometry
,并且不应因新包而中断。
这是我的 MWE,使用侧注和边注来显示差异:
\documentclass[a4paper,11pt,twoside,openright,parskip=half]{scrbook}
\usepackage[ngerman, english]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{calc}
\makeatletter
\newlength \figwidth
\setlength \figwidth {-3cm}
\makeatother
\usepackage{geometry}
\geometry{a4paper, top=30mm, left=30mm, right=55mm, bottom=35mm, marginparwidth=-\figwidth-1em, marginparsep=1em}
\usepackage{marginnote}
\usepackage{sidenotes}
\renewcommand*{\marginfont}{\footnotesize}
\newcommand{\smallside}[1]{\sidenote{\footnotesize{#1}}}
\usepackage{caption}
\usepackage{graphicx}
\usepackage[strict]{changepage}
\newenvironment{widefigure}[1][tbp]
{\begin{figure}[#1]\begin{adjustwidth*}{0cm}{\figwidth}\centering}%
{\end{adjustwidth*}\end{figure}}
\usepackage{blindtext}
\begin{document}
\begin{widefigure}[tbp]
\includegraphics[width=\linewidth, height=9cm]{example-image}
\caption{Some figure caption in here that does not really matter but should be long enough to fill the line and also break}
\end{widefigure}
\blindtext
\marginnote{some long text for the margin}
\blindtext
\smallside{some long text for the margin}
\blindtext
%\newpage
\begin{widefigure}[tbp]
\includegraphics[width=\linewidth, height=9cm]{example-image}
\caption{Some figure caption in here that does not really matter but should be long enough to fill the line and also break}
\end{widefigure}
\marginnote{some extremely long text for the margin going on many lines}
\blindtext
\smallside{some extremely long text for the margin going on many lines}
\blindtext
\end{document}
答案1
\sidenote
\marginnote
当给出偏移量时使用,\marginpar
否则。\marginnote
执行\raggedleft
/\raggedright
操作但\marginpar
不执行。另一方面,\marginpar
尝试浮动音符,以便它们不会相互碰撞。
因此基本上有两种解决方案:
(1)在 的定义中给出一个偏移量\smallside
:
\newcommand{\smallside}[1]{\sidenote[][0pt]{\footnotesize{#1}}}
但这样你的旁注就不再浮动了,所以它们会互相碰撞。但你确实得到了正确的粗糙内容。
\marginpar
(2) 更改在和之间进行选择的旁注宏部分的定义,\marginnote
并将\ragged...
内容提供给\marginpar
。
\makeatletter
\RenewDocumentCommand \@sidenotes@placemarginal { m m }
{%
\IfNoValueOrEmptyTF{#1}
{\marginpar[\raggedleftmarginnote #2]{\raggedrightmarginnote #2}}
{\marginnote{#2}[#1]}%
}
\makeatother
顺便说一句,我认为sidenotes
包中有一些虚假的空格。我必须删除上述宏定义中的一些空格。
答案2
Piet van Oostrum 的回答对我来说编译不出来(我没有足够的声誉来评论它)。但是用\marginpar
括号括住第一个(可选)参数就可以了。我还\ragged...marginnote
用普通命令替换了 marginnote 包的命令\ragged...
,但这不是必需的:
\makeatletter
\RenewDocumentCommand \@sidenotes@placemarginal { m m }
{%
\IfNoValueOrEmptyTF{#1}
{\marginpar[{\raggedleft #2}]{\raggedright #2}}
{\marginnote{#2}[#1]}%
}
\makeatother