格式化 Memoir 的 \sourceatright 字体和大小

格式化 Memoir 的 \sourceatright 字体和大小

我一直试图让引文的作者以与引文其余部分不同的字体大小和字体样式显示。

梅威瑟:

\documentclass[11pt]{memoir} % draft

\renewcommand*{\sourceatright}[2][2em]{{%
  \unskip\nobreak\hfil\penalty50
  \hskip#1\hbox{}\nobreak\hfil\tiny\sffamily{#2}
  \parfillskip\z@\finalhyphendemerits=0\par}}

\begin{document}
\begin{quotation}
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam ante sapien, feugiat sed elit id, tempus dictum erat. Maecenas bibendum eget lectus eu mollis.\sourceatright{Lipsum 2016}
\end{quotation}

\end{document}

据我所知,它不喜欢这种放置方式,\tiny\sffamily但我就是不知道该怎么做。

我收到的错误是这样的:

 ! Undefined control sequence.
 \\sourceatright ...\sffamily {#2} \parfillskip \z
                                                  @\finalhyphendemerits =0\p...
 l.11 ...ctus eu mollis.\sourceatright{Lipsum 2016}

任何帮助都将受到赞赏。

答案1

\makeatletter需要\makeatother,看到\makeatletter 和 \makeatother 起什么作用?.但还有另一项调整。

\documentclass[11pt]{memoir} % draft

\makeatletter
\renewcommand*{\sourceatright}[2][2em]{{%
  \unskip\nobreak\hfil\penalty50
  \hskip#1\hbox{}\nobreak\hfil{\tiny\sffamily#2}%
  \parfillskip\z@\finalhyphendemerits=\z@\par}}
\makeatother

\begin{document}

\begin{quotation}
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aliquam ante sapien, feugiat sed elit id, tempus dictum erat.
Maecenas bibendum eget lectus eu mollis.\sourceatright{Lipsum 2016}
\end{quotation}

\end{document}

不同之处在于\tiny\sffamily{#2}应该是{\tiny\sffamily#2},否则\tiny当段落分成几行时 将会生效,并产生严重后果。

在此处输入图片描述

使用 可缩短代码xpatch

\documentclass[11pt]{memoir} % draft

\usepackage{xpatch}

\xpatchcmd{\sourceatright}{#2}{\tiny\sffamily#2}{}{}

\begin{document}

\begin{quotation}
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Aliquam ante sapien, feugiat sed elit id, tempus dictum erat.
Maecenas bibendum eget lectus eu mollis.\sourceatright{Lipsum 2016}
\end{quotation}

\end{document}

相关内容