页边距中多行引文的作者格式

页边距中多行引文的作者格式

我使用自己的命令,使用 pdflatex 和 memoir 在文档边缘排版引文,请参阅下面的 MWE。每句引文都由实际引文本身及其作者组成。我遇到的问题是,作者总是排版在新行上,即使在同一行的引文结束后有足够的空间以适当的间距显示它。

在下面的 MWE 中,我认为第二句引言的作者不应该排版在新行上,而应该排在同一行上。有没有办法可以自动实现以下功能:

  1. 如果引文适合一行,作者会另起一行。(MWE 中的第一个引文。)
  2. 如果引文不适合一行,但引文结束后有足够的空间(我承认,不清楚“足够”是什么意思),那么作者应该列在引文末尾的同一行上。(这是我希望在 MWE 中的第二段引文中得到的,但目前还没有。)
  3. 如果引文无法放在一行中,并且引文结束后没有足够的空间,则作者将列在新行中。(MWE 中的第三个引文。)

梅威瑟:

\documentclass[a4paper,10pt,draft]{memoir}
\usepackage{lipsum}
%%% formatting
\setstocksize{29.7cm}{21.0cm} % A4 stock
\settrimmedsize{27.94cm}{21.0cm}{*} % 27.94cm = 11in
\setlength{\trimtop}{0.0cm}
\setlength{\trimedge}{\stockwidth}
\addtolength{\trimedge}{-\paperwidth}
\settypeblocksize{23.94cm}{12.3cm}{*}
\setlrmargins{2.0cm}{*}{*}
\setulmargins{2.0cm}{*}{*}
\setmarginnotes{\onelineskip}{5.28cm}{\onelineskip}
%%% side notes
\marginparmargin{outer}
\newcommand{\mysidenote}[1]{\strictpagecheck\marginpar{\footnotesize #1}%
}
%%% side quotes - building on mysidenote
\newcommand{\mysidequote}[2]{\strictpagecheck
  \marginpar{%
    \raggedright\footnotesize\textsl{#1}%
    \newline\hspace*{\fill} ---{#2}%
  }
}
\checkandfixthelayout
\begin{document}
\lipsum[1]
\mysidequote{I don't like being quoted in the margins.}{A. N. Other}
\lipsum[2]
\mysidequote{Some quotes are too long to fit onto a single line.}{Y. A. N. Other}
\lipsum[3]
\mysidequote{Some quotes are too long to fit onto a single line and need two
full lines.}{Y. A. N. Other}
\end{document} 

答案1

这很好用

\strictpagecheck
\newcommand{\mysidequote}[2]{
  \marginpar{%
    \raggedright\footnotesize\textsl{#1}%
    %\newline\hspace*{\fill} ---{#2}%
    \sourceatright{---#2}
  }
}

编辑:这似乎有效,它是我内部使用的某些宏的副本,实际上它是dlfltxbmiscCTAN 上找到的宏的修改版本。由 Morten Høgholm 和 Dan Luecking 提出的想法

\makeatletter 
\newdimen\lastlinedim
\def\getlastlinesize{%
   \begingroup\frozen@everydisplay{}%
        $$
        \abovedisplayskip=\z@skip \abovedisplayshortskip=\z@skip
        \belowdisplayskip=\z@skip \belowdisplayshortskip=\z@skip
        \global\lastlinedim=\dimexpr\predisplaysize-2em\relax
        \halign{##\cr}%
        $$
        \mbox{}%
        \endgroup%
}
\newcommand\addAuthor[1]{%
  \getlastlinesize{}%
  \vskip-2\baselineskip%
  \begingroup%
  \raggedleft%
  \fussy%
  \hbadness=10000% cheating
  \fboxsep=0pt%
  \fboxrule=0pt%
  \fbox{\hbox to \lastlinedim{\hfill \strut   \hfill}}%
  \ifdim \lastlinedim > 0.6\linewidth\relax% we break
  \nopagebreak\vskip0pt%
  \else%
  % special thanks to Dan Luecking for this, since my original
  % \hspace{\fill} failed miserably
  \hskip1em plus 5em minus .7em
  \fi%
  {---#1\strut} % 
  \par%
  \endgroup%
}
\makeatother
\newcommand{\mysidequote}[2]{
  \marginpar{%
    \raggedright\footnotesize\textsl{#1}%
    \addAuthor{#2}%
  }%
}

相关内容