我想将引文的作者定位在引文的右侧。
为什么\raggedleft
不工作?
\documentclass{scrlttr2}
\usepackage[scaled]{helvet}
\renewcommand\familydefault{\sfdefault}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\NewDocumentEnvironment{textquote}{ O{}+b}
{\begin{samepage}\begin{addmargin}{2.5cm}\guillemotright#2\guillemotleft\end{addmargin}\end{samepage}}
{\footnotesize \raggedleft \textbf{#1}}
\begin{document}
\begin{textquote}[René Descartes]
[...] I think therefore I am.
\end{textquote}
\end{document}
答案1
如果您使用 测试您的环境,\end{textquote}test
您将看到名称排版在与环境后的文本相同的段落中。一旦此段落结束,您就不再处于\raggedleft
模式中。
为了避免这种情况,您应该在环境末尾完成该段落:
\documentclass{scrlttr2}
\usepackage[scaled]{helvet}
\renewcommand\familydefault{\sfdefault}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\NewDocumentEnvironment{textquote}{ O{}+b}
{\begin{samepage}\begin{addmargin}{2.5cm}\guillemotright#2\guillemotleft\end{addmargin}\end{samepage}}
{\footnotesize \raggedleft \textbf{#1}\par}
\begin{document}
\begin{textquote}[René Descartes]
[...] I think therefore I am.
\end{textquote}
\end{document}
答案2
抱歉,您的代码中存在几个错误。
参数
textquote
是强制性的,而不是可选的。引文周围没有垂直空间。
引用和归因之间有一个可行的分页点。
您
\par
最后错过了一个,因此它\raggedleft
无法完成其工作(但\raggedleft
不是正确的工具)。
固定代码。
\documentclass{scrlttr2}
%\usepackage[utf8]{inputenc}% no longer needed
\usepackage[T1]{fontenc}
%\usepackage[scaled]{helvet}
\usepackage{sourcesanspro}% not Helvetica, please
\renewcommand\familydefault{\sfdefault}
\usepackage{lipsum} % for filler text
\NewDocumentEnvironment{textquote}{m +b}{%
\par\addvspace{\topsep}
\begin{samepage}\begin{addmargin}{2.5cm}
\guillemotright#2\guillemotleft
\end{addmargin}\par\nopagebreak
{\footnotesize\hspace*{\fill}\textbf{#1}\par}
\end{samepage}%
\par\addvspace{\topsep}
}{}
\begin{document}
\lipsum[1][1-4]
\begin{textquote}{René Descartes}
[\dots] I think therefore I am.
\end{textquote}
\lipsum[2][1-4]
\begin{textquote}{Somebody Else}
\lipsum[3][1-4]
\end{textquote}
\lipsum[4][1-4]
\end{document}
下图显示了为什么不应使用 Helvetica 字体来书写较长的文本。可以(也应该)使用其他无衬线字体。