我希望左边距的边注与段落第一行对齐,类似于这个问题。基本上,这些是段落的标题。在源代码中,我希望边注先行为了便于阅读,它要附加到的段落(读者将首先阅读边注,因此我想先写它)。
链接的问题说这应该可行,但对我来说,这将边注与最后一行对齐以前的段落:
\marginpar{Note}
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
答案1
\nextmarginpar
这样可以在和下一段之间留一个空行。
我尝试过\everypar
,但它也运行得太快了。
\documentclass[11pt]{article}
\usepackage{lipsum}% MWE only
\newcommand{\nextmarginpar}[2][\empty]{% same as \marginpar
\ifx\empty#1\relax
\leavevmode\marginpar{#2}\vspace{-\baselineskip}\vspace{-\parskip}\par
\else
\leavevmode\marginpar[#1]{#2}\vspace{-\baselineskip}\vspace{-\parskip}\par
\fi
\ignorespaces}
\begin{document}
\lipsum[1]
\nextmarginpar{Note}
\lipsum[2]
\end{document}
答案2
\marginpar
不是适合这项工作的工具。如果这是节标题,则应使用\section
格式将标题放在边距中。以下是我编写的一些未记录的代码,它们在级别上执行此操作\subsection
。
\def\subsection{\@afterindentfalse\secdef\@subsection\@ssubsection}
\def\@subsection[#1]#2{%
\ifnum \c@secnumdepth>1
\refstepcounter{subsection}
\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}#1}%
\else
\addcontentsline{toc}{subsection}{#1}%
\fi
\subsectionmark{#1}
\vskip 12pt plus2pt minus1pt
\def\@svsechd{\raggedright\reset@font\normalsize\textit{\ifnum\c@secnumdepth>1\relax\thesubsection~\fi#2}}
\@@afterheading}
\def\@ssubsection#1{\def\@svsechd{\reset@font\raggedleft\large\sc#1}%
\@@afterheading}
\def\@@afterheading{\global\@nobreaktrue
\everypar{\if@nobreak
\global\@nobreakfalse
\if@afterindent \else {\setbox0=\lastbox}\fi
% \interlinepenalty \@M
\vadjust{\llap{\vbox to0pt{\vskip-9pt
\vtop{\hsize\marginparwidth
\@svsechd}\vss}\hskip\marginparsep}}%
\clubpenalty \@M
\else \clubpenalty \@clubpenalty
\interlinepenalty \@interlinepenalty
\everypar{}\fi}}
此代码有一个限制,即如果紧接着该\subsubsection
代码,\subsection
则标题将消失。¹
这个代码有点旧了,如果我现在从头开始创建它,我可能会做一些不同的事情,但它至少应该是一个很好的起点。
“医生,我这样做会很痛。”
“那就别这么做。”