PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \hfill am Zeilenende



rstuby
01-04-2010, 12:44
Hallo!
Ich möchte einen Zusatz ans Ende der letzten Zeile setzen.
Wenn der Zusatz dort Platz hat, funktioniert mit \hfill alles gut. Wenn nicht, kommt der Zusatz an den Anfang der nächsten Zeile, und die letzte Zeile davor wird bis zum rechten Rand auseinander gezogen (sie gilt dann wohl nicht als die letzte). Nun dachte ich, man könnte das Zeilenende mit \hspace*\fill füllen, dann kommt aber nur der Zusatz ans Ende der nächsten Zeile. Die vorhergehende Zeile wird trotzdem auseinandergezogen.
Gibt es eine Möglichkeit, zu erreichen, dass die letzte Zeile keinen Randausgleich erfährt, ohne \flushleft oder \raggedright global zu benutzen, was weder in einer \verse-Umgebung (wo die eine rand"ausgeglichene" Zeile am hässlichsten aussieht) noch in einem Blocksatztext gut funktioniert?


[CODE]\documentclass{scrbook}
%\usepackage {hyperref}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage[ngerman]{babel}

%\KOMAoptions{DIV=13}

\makeatletter

\renewcommand{\familydefault}{cmss}


\begin{document}

Die Lichtgeschwindigkeit ist konstant. \hfill Einstein

Die Lichtgeschwindigkeit ist konstant. \hspace*\fill Einstein

Die Lichtgeschwindigkeit ist konstant. \\ \hfill Einstein

Der Weisen Zunge bringt gute Erkenntnis; wer Zurechtweisung annimmt, der ist klug.
\hfill Spr.~11,2a.7a

Der Weisen Zunge bringt gute Erkenntnis; wer Zurechtweisung annimmt, der ist klug.
{\raggedright\hfill Spr.~11,2a.7a}

Der Weisen Zunge bringt gute Erkenntnis; wer Zurechtweisung annimmt, der ist klug.
\hspace*\fill Spr.~11,2a.7a

Der Weisen Zunge bringt gute Erkenntnis; wer Zurechtweisung annimmt, der ist klug.
\\ \hfill Spr.~11,2a.7a

\end{document}[\CODE]

u_fischer
01-04-2010, 13:56
Das steht schon im TeXbook. Im Wesentlichen brauchst du
\mbox{}\nolinebreak\hfill und dann noch ein paar Feinheiten für Spezialfälle.



\newcommand\ontheright[1]{{\unskip\nobreak\hfill\penalty50\
\mbox{}\nobreak\hfill#1\parfillskip=0pt \finalhyphendemerits=0\par}}

....
\ontheright{Einstein}

Schweinebacke
01-04-2010, 14:00
Wenn ich Dich recht verstehe, suchst Du etwas wie:
\documentclass{scrbook}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}

\usepackage[ngerman]{babel}

\newcommand*{\hfillplus}{\hfill\linebreak[3]\hspace*{\fill}}


\begin{document}

Die Lichtgeschwindigkeit ist konstant. \hfillplus Einstein


Der Weisen Zunge bringt gute Erkenntnis; wer Zurechtweisung annimmt, der ist klug.\hfillplus
Spr.~11,2a.7a

\end{document}

rstuby
01-04-2010, 14:08
Wow, das ist super! Vielen Dank!

rstuby
01-04-2010, 14:18
Also mit super meinte ich jetzt Ulrikes Vorschlag. Der ist zwar kompliziert (allein wäre ich da nie drauf gekommen), aber er macht alles, was ich will.

Bei Schweinebackes Vorschlag ist das Zeilenende immer noch am rechten Rand ausgerichtet, wie man sieht, wenn man mit \renewcommand{\familydefault}{cmss} wieder alles in sans-serif macht oder die Zeile ein bisschen verkürzt und dann vergleicht, wie lang dieselbe Zeile vor \\ bleibt.
Soweit ich weiß, macht \linebreak auch sowieso einen Randausgleich. Wenn man keinen haben will, müsste man \newline schreiben, aber das geht soweit ich weiß nicht fakultativ.

lockstep
01-04-2010, 15:12
Ich würde Ulrikes Vorschlag geringfügig abwandeln (\mbox{\quad} statt \mbox{}), um einen "Respektabstand" zwischen Zitat und Quelle sicherzustellen.



\documentclass[fontsize=16pt,parskip=half]{scrbook}

\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}

\areaset{11.7cm}{21cm}

\renewcommand{\familydefault}{cmss}

\newcommand\ontheright[1]{{\unskip\nobreak\hfill\penalty50\
\mbox{}\nobreak\hfill#1\parfillskip=0pt \finalhyphendemerits=0\par}}

\newcommand\ontherightii[1]{{\unskip\nobreak\hfill\penalty50\
\mbox{\quad}\nobreak\hfill#1\parfillskip=0pt \finalhyphendemerits=0\par}}

\begin{document}

Der Weisen Zunge bringt gute Erkenntnis; wer Zurechtweisung annimmt, der ist klug.\ontheright{Spr.~11,2a.7a}

Der Weisen Zunge bringt gute Erkenntnis; wer Zurechtweisung annimmt, der ist klug.\ontherightii{Spr.~11,2a.7a}

\end{document}


lockstep

rstuby
02-04-2010, 06:59
Danke lockstep!

Ich wusste noch nicht mal, dass man solche Sachen wie \mbox{} überhaupt in eine Makrodefinition schreiben kann.

Schweinebacke
02-04-2010, 21:21
Bei Schweinebackes Vorschlag ist das Zeilenende immer noch am rechten Rand ausgerichtet
Mit
\newcommand*{\hfillplus}{\hspace*{\fill}\linebreak[3]\hspace*{\fill}} funktioniert es.

rstuby
03-04-2010, 12:04
Ja, genau so was hatte ich gemeint!

Und frohe Ostern! :-)