我使用自己的命令,使用 pdflatex 和 memoir 在文档边缘排版引文,请参阅下面的 MWE。每句引文都由实际引文本身及其作者组成。我遇到的问题是,作者总是排版在新行上,即使在同一行的引文结束后有足够的空间以适当的间距显示它。
在下面的 MWE 中,我认为第二句引言的作者不应该排版在新行上,而应该排在同一行上。有没有办法可以自动实现以下功能:
- 如果引文适合一行,作者会另起一行。(MWE 中的第一个引文。)
- 如果引文不适合一行,但引文结束后有足够的空间(我承认,不清楚“足够”是什么意思),那么作者应该列在引文末尾的同一行上。(这是我希望在 MWE 中的第二段引文中得到的,但目前还没有。)
- 如果引文无法放在一行中,并且引文结束后没有足够的空间,则作者将列在新行中。(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}
}
}
编辑:这似乎有效,它是我内部使用的某些宏的副本,实际上它是dlfltxbmisc
CTAN 上找到的宏的修改版本。由 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}%
}%
}