Wie kann ich ein Zitat rechtsbündig ausrichten, möglichst in der gleichen Zeile wie das Zitat?

Wie kann ich ein Zitat rechtsbündig ausrichten, möglichst in der gleichen Zeile wie das Zitat?

Oft werden Zitate mit der Quellenangabe rechtsbündig gesetzt:

Zitat mit rechtsbündiger Quellenangabe in der Zeile unter dem Zitat

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.

Zitat mit rechtsbündiger Quellenangabe in derselben Zeile

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 tabtoPaket 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}

Bildbeschreibung hier eingeben

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 , \newsaveboxum 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 linegoalPaket.

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}

verwandte Informationen