Oft werden Zitate mit der Quellenangabe rechtsbündig gesetzt:
Die Quellenangabe steht in einer neuen Zeile nach dem Zitat. Nehmen wir jedoch an, dass in der letzten Zeile des Zitats genügend Platz für die Quellenangabe ist. Dann möchten wir sie vielleicht in derselben Zeile platzieren, um übermäßige Leerzeichen zu vermeiden.
Wir möchten einen Befehl definieren (nennen wir ihn quoteattr
), der berechnet, ob das Zitat passt und es automatisch entsprechend platziert.
Code ohne Befehlsdefinition:
\documentclass[12pt]{book}
\begin{document}
\quoteattr{Early to bed and early to rise,\\
Makes a man healthy, wealthy, and wise.}{Benjamin Franklin, 1706--1790}
\quoteattr{Seek not the favor of the multitude; it is seldom got by honest and lawful means. But seek the testimony of few; and number not voices, but weigh them.}{Immanuel Kant, 1724--1804}
\end{document}
Antwort1
Es scheint, dass das tabto
Paket diesbezüglich helfen kann.
\documentclass[12pt]{book}
\usepackage{tabto}
\def\quoteattr#1#2{\setbox0=\hbox{#2}#1\tabto{\dimexpr\linewidth-\wd0}\box0}
\parskip 1em
\begin{document}
\quoteattr{Early to bed and early to rise,\\
Makes a man healthy, wealthy, and wise.}{Benjamin Franklin, 1706--1790}
\quoteattr{Seek not the favor of the multitude; it is seldom got by honest and lawful means. But seek the testimony of few; and number not voices, but weigh them.}{Immanuel Kant, 1724--1804}
\quoteattr{In attempting to make this not give enough space... Seek not the favor of the multitude; it is seldom got by honest and lawful means. But seek the testimony of few; and number not voices, but weigh them.}{Immanuel Kant, 1724--1804}
\end{document}
Antwort2
Dies kann in klassischer TeX-Manier mit einem Makro vonDas TeXBook, S. 106, nur durch das Herumspielen mit Strafstößen, Sprüngen und Boxen:
\def\signed #1 (#2){{\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil\sl#1\/ \rm(#2)
\parfillskip=0pt \finalhyphendemerits=0 \par}}
Damit können Sie Ihre Angebote wie folgt eingeben:
\begin{quote}Here is one way to solve the problem.
\signed Donald E. Knuth (Berkeley, CA)
\end{quote}
Wenn in derselben Zeile Platz für 2em und die Signatur ist, wird es dort eingefügt. Andernfalls wird es in eine neue Zeile eingefügt. Vielleicht möchten Sie natürlich nur einen Namen statt Name und Ort, oder Sie möchten es einfach etwas mehr im LaTeX-Stil. In diesem Fall könnten Sie so etwas tun:
\def\signed#1{{\unskip\nobreak\hfil\penalty50
\hskip2em\hbox{}\nobreak\hfil\sl#1
\parfillskip=0pt \finalhyphendemerits=0 \par}}
Und Sie würden es wie oben eingeben, aber \signed{Donald E. Knuth}
stattdessen mit.
Antwort3
Um dies umzusetzen, verwenden wir , \newsavebox
um die Länge zum Füllen der leeren Zeile zu ermitteln. Wir können nicht verwenden \hfill
, da dies immer eine nominale Länge von 0 hat. Stattdessen verwenden wir das linegoal
Paket.
Wir werden es auch verwenden xifthen
, um uns das Schreiben der Bedingung zu ermöglichen.
Es sind zwei Durchgänge erforderlich.
\documentclass[12pt]{book}
\usepackage{linegoal}
\usepackage{xifthen}
\newsavebox{\quotebox}
\newlength{\emptywidth}% To save the length of empty space
\newlength{\attrwidth}% To save the length of the attribution
% Define the new command
\newcommand{\quoteattr}[2]{
\begin{quote}#1%
\begin{lrbox}{\quotebox}\hspace{\linegoal}\end{lrbox}
\setlength{\emptywidth}{\linegoal}
\settowidth{\attrwidth}{\textit{#2}}
% The following line can be tweaked to force attributions
% onto a new line if it would be a very tight squeeze
\addtolength{\attrwidth}{0em}
% Compare the two widths.
\ifthenelse{\lengthtest{\emptywidth>\attrwidth}}
% If it fits:
{\null\hfill\textit{#2}}
% If it doesn't:
% We need to provide a stretch in this way because TeX
% might compress a slightly-too-long line to prevent
% a loose line followed by a lonely word. However, then
% on the next run, TeX won't compress it because of the
% following text on a new line.
{\hspace{0pt plus \textwidth minus 3pt}\null\nopagebreak\linebreak\null\hfill{\textit{#2}}}%
% For debugging, display the lengths.
Empty space: \the\emptywidth
\\Attribution space: \the\attrwidth
\end{quote}
}
\begin{document}
\quoteattr{Early to bed and early to rise,\\
Makes a man healthy, wealthy, and wise.}{Benjamin Franklin, 1706--1790}
\quoteattr{Seek not the favor of the multitude; it is seldom got by honest and lawful means. But seek the testimony of few; and number not voices, but weigh them.}{Immanuel Kant, 1724--1804}
\end{document}