我一直试图让引文的作者以与引文其余部分不同的字体大小和字体样式显示。
梅威瑟:
\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}