Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zitat mit Seitenangabe auf neuer Zeile verhindern?

64 views
Skip to first unread message

Gilbert Mirenque

unread,
Jun 3, 2010, 12:45:11 PM6/3/10
to
Ich zitiere folgende Quelle:

\cite[S.~148ff]{Kerievsky2005}

Nun wird daraus im Pdf das hier:

Lorem ipsum [Ker04,
S. 148ff].

Kann ich diesen Zeilenumbruch irgendwie kontrollieren? Wenn manchmal
nach dem "S." umbrochen wird, also nur die Seitenangabe auf der nächsten
Zeile steht, geschieht dies, wie oben auch benutzt, mit der Tilde. Kann
mir jemand helfen?

Benjamin Hell

unread,
Jun 4, 2010, 2:55:34 AM6/4/10
to
On 2010-06-03 18:45 , Gilbert Mirenque wrote:
> Ich zitiere folgende Quelle:
>
> \cite[S.~148ff]{Kerievsky2005}
>
> Nun wird daraus im Pdf das hier:
>
> Lorem ipsum [Ker04,
> S. 148ff].
>
> Kann ich diesen Zeilenumbruch irgendwie kontrollieren?

Das geht vermutlich schon irgendwie.

> Wenn manchmal
> nach dem "S." umbrochen wird, also nur die Seitenangabe auf der nächsten
> Zeile steht, geschieht dies, wie oben auch benutzt, mit der Tilde. Kann
> mir jemand helfen?

Ich vermute leider nicht: Mit so wenig Angaben kann man nicht einmal
raten was Du sonst so machst (z.B. wie Du genau Bibtex verwendest).
Kannst Du ein kleines komplettes Beispiel posten (das nennt man hier
http://www.minimalbeispiel.de/)? Ich habe hier selbst vor drei Tagen
ein Minimalbeispiel mit Bibtex gepostet (Message-ID:
<86kp2l...@mid.individual.net>), nur zur Orientierung wie sowas
aussehen kann.

Gruß,

Beni

Gilbert Mirenque

unread,
Jun 4, 2010, 5:33:11 AM6/4/10
to

> Ich vermute leider nicht: Mit so wenig Angaben kann man nicht einmal
> raten was Du sonst so machst (z.B. wie Du genau Bibtex verwendest).
> Kannst Du ein kleines komplettes Beispiel posten (das nennt man hier
> http://www.minimalbeispiel.de/)? Ich habe hier selbst vor drei Tagen
> ein Minimalbeispiel mit Bibtex gepostet (Message-ID:
> <86kp2l...@mid.individual.net>), nur zur Orientierung wie sowas
> aussehen kann.
Ich versuch's - dachte nur, jemand hatte schon dasselbe Problem. Wie
suche ich denn nach dem Thread mit der von dir angegebenen Message-ID?
Google spuckte mir nur diesen Thread aus. Eigentlich benutze ich ja
Thunderbird zum Lesen der Newsgroup. Kann ich damit irgendwie danach suchen?

Gilbert Mirenque

unread,
Jun 4, 2010, 6:00:46 AM6/4/10
to
So - habe jetzt ein Minimalbeispiel.
Hier die Tex-Datei:

\documentclass{scrbook}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{bibgerm}

\begin{document}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
voluptua \cite[S.~148ff]{Kerievsky2005}.

\bibliography{testbib}
\bibliographystyle{geralpha}

\end{document}


und hier die testbib.bib:

@BOOK{Kerievsky2005,
title = {{R}efactoring to {P}atterns},
publisher = {Addison-Wesley},
year = {2004},
author = {{K}erievsky, {J}oshua}
}

Ganz hässlich ist es, wenn die Seitenangabe dann auch noch auf einer
neuen Seite erscheint.

Olaf Meltzer

unread,
Jun 4, 2010, 6:37:32 AM6/4/10
to
* Gilbert Mirenque schrieb:

> So - habe jetzt ein Minimalbeispiel.

Das ist nun etwas zu minimal, denn es erfordert noch Kopieren und etwas
Dateiverwaltung. ;-)

Mit nur einem Mauswisch und anschließendem Einfügen in die Testumgebung
könnte folgendes wirklich unaufwendig begutachtet werden. Ich wäre dann
unter Einsparung einiger Lebenszeit auf die Idee gekommen, den
Zitataufruf, wie hier gleich demonstriert, in eine \hbox zu setzen:

\documentclass{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{bibgerm}

\usepackage{filecontents}
\begin{filecontents}{testbib.bib}


@BOOK{Kerievsky2005,
title = {{R}efactoring to {P}atterns},
publisher = {Addison-Wesley},
year = {2004},
author = {{K}erievsky, {J}oshua}
}

\end{filecontents}

\begin{document}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam

voluptua \hbox{\cite[S.~148ff]{Kerievsky2005}}.

\bibliography{testbib}
\bibliographystyle{geralpha}
\end{document}

Gruß -- Olaf Meltzer

--
openSUSE 11.1 - TeX Live 2010 - Netzinstallation, aktuell mit tlmgr

Benjamin Hell

unread,
Jun 4, 2010, 6:56:17 AM6/4/10
to
On 2010-06-04 12:37 , Olaf Meltzer wrote:
> Gilbert Mirenque schrieb:
>> So - habe jetzt ein Minimalbeispiel.
>
> Das ist nun etwas zu minimal, denn es erfordert noch Kopieren und etwas
> Dateiverwaltung. ;-)

Kopieren muss man wohl immer. Wobei - echte Nerds haben sicher schon
einen Weg gefunden direkt im Newsreader pdflatex aufzurufen und über
alles im Posting zwischen \documentclass und \end{document} laufen
zu lassen.

> Mit nur einem Mauswisch und anschließendem Einfügen in die Testumgebung
> könnte folgendes wirklich unaufwendig begutachtet werden. Ich wäre dann
> unter Einsparung einiger Lebenszeit auf die Idee gekommen, den
> Zitataufruf, wie hier gleich demonstriert, in eine \hbox zu setzen:

Ich habe ein bisschen mehr Zeit mit .bst-Lesen verbracht und komme
zum Schluss dass das Setzen der "prenote" (und "postnote") weder von
geralpha.bst noch von bibgerm.sty durchgeführt wird. Das gesuchte
Leerzeichen («\ »), das mit «~» ersetzt werden müsste, ist also wohl
irgendwo tiefer in den Bibtex-Interna versteckt. Und damit gewinnt
Olafs etwas brutale Box-Methode für mich erheblich an Sex-Appeal...

Gruß,

Beni

Gilbert Mirenque

unread,
Jun 4, 2010, 7:11:46 AM6/4/10
to
Hi Olaf,
danke, so geht's. An \hbox habe ich irgendwie nicht gedacht
*ankopfklatsch*. Da ich das jetzt ungern an jeder Stelle im Dokument per
Hand ändern wollte, habe ich mir überlegt, den \cite-Befehl einfach
umzudefinieren. Folgendes:

% Cite mit hbox
\let\OldCite\cite
\newcommand{\NewCite}[2][\empty]{\hbox{\OldCite[#1]{#2}}}
\let\cite\NewCite

Jedoch bekomme ich dann an den Stellen, wo vorher der Zeilenumbruch war,
nun eine overfull \hbox. Im angehangenen Minimalbeispiel ist das auch
der Fall - man sieht es zwar nicht wirklich aber das Log weist darauf
hin. In meinem richtigen Dokument ist es wirklich so, dass solche Zitate
damit über den Rand gehen. Das ist auch unschön. Ein anderes Problem,
was ich mit der Umdefinition habe ist, dass normale Einträge ohne
Seitenangabe jetzt so gerendert werden:

[Ker04, ]

Kann ich den Befehl so definieren, dass nur bei optionaler Angabe einer
Seite auch das Komma gesetzt wird? Und wie kann ich den Befehl außerdem
so anpassen, dass vor der Referenz die Zeile umbrochen wird, so dass die
overfull \hbox nicht mehr auftritt? Das mit dem Komma könnte ich ja
lösen, indem ich tatsächlich alles per Hand mache - das zweite Problem
wird allerdings damit auch nicht gelöst. Jemand eine Idee?

Viele Grüße,
Gilbert

bibtex_pagebreak.tex
testbib.bib

Heiko Oberdiek

unread,
Jun 4, 2010, 8:25:31 AM6/4/10
to
Olaf Meltzer <om-ne...@arcor.de> wrote:

> unter Einsparung einiger Lebenszeit auf die Idee gekommen, den
> Zitataufruf, wie hier gleich demonstriert, in eine \hbox zu setzen:

> voluptua \hbox{\cite[S.~148ff]{Kerievsky2005}}.

Besser ist \mbox, \hbox beginnt im vertikalen Modus keinen Absatz.

--
Heiko Oberdiek

Olaf Meltzer

unread,
Jun 4, 2010, 9:29:34 AM6/4/10
to
* Heiko Oberdiek schrieb:

>> voluptua \hbox{\cite[S.~148ff]{Kerievsky2005}}.
>
> Besser ist \mbox, \hbox beginnt im vertikalen Modus keinen Absatz.

Machte sich das bemerkbar, falls innerhalb der \cite-Expansion eine neue
Zeile nötig würde? Irgendwie kann ich mir sonst keine Situation
vorstellen, in der "\cite im vertikalen Modus" benutzt würde, also
vermutlich der Beginn der Zitatausgabe auf eine neue Zeile umbrochen und
gleichzeitig ein neuer Absatz (dann ja mit Einzug oder Abstand) erzeugt
werden müßte.

Olaf Meltzer

unread,
Jun 4, 2010, 9:43:55 AM6/4/10
to
* Gilbert Mirenque schrieb:

> Kann ich den Befehl so definieren, dass nur bei optionaler Angabe
> einer Seite auch das Komma gesetzt wird? Und wie kann ich den Befehl
> außerdem so anpassen, dass vor der Referenz die Zeile umbrochen wird,
> so dass die overfull \hbox nicht mehr auftritt? Das mit dem Komma
> könnte ich ja lösen, indem ich tatsächlich alles per Hand mache - das
> zweite Problem wird allerdings damit auch nicht gelöst. Jemand eine
> Idee?

Mit einer entsprechend bedingten Definition des \cite-Makros kann ich
nicht dienen, aber mir ist beim Experimentieren aufgefallen, daß Du
vermutlich weniger Probleme hättest, wenn Du das \mbox{\cite[]{}} durch
ein Leerzeichen vom vorhergehenden Text absätztest, wie Du es jetzt auch
gepostet hast Ich hab das mit Deinem Beispiel durch sukzessives Ergänzen
weiterer a an das voluptua getestet: Auch dann bekam ich mit Deinem
Beispiel geringfügige overfull hboxes (maximal 0,7pt), aber bevor etwas
sichtbar in den Rand ragte, wurde doch rechtzeitig das komplette Zitat
umbrochen.

Olaf Meltzer

unread,
Jun 4, 2010, 9:46:31 AM6/4/10
to
* Gilbert Mirenque schrieb:

> Kann ich den Befehl so definieren, dass nur bei optionaler Angabe
> einer Seite auch das Komma gesetzt wird? Und wie kann ich den Befehl
> außerdem so anpassen, dass vor der Referenz die Zeile umbrochen wird,
> so dass die overfull \hbox nicht mehr auftritt? Das mit dem Komma
> könnte ich ja lösen, indem ich tatsächlich alles per Hand mache - das
> zweite Problem wird allerdings damit auch nicht gelöst. Jemand eine
> Idee?

Mit einer entsprechend bedingten Definition des \cite-Makros kann ich

nicht dienen, aber mir ist beim Experimentieren aufgefallen, daß Du
vermutlich weniger Probleme hättest, wenn Du das \mbox{\cite[]{}} durch

ein Leerzeichen vom vorhergehenden Text absetztest, wie Du es jetzt auch

gepostet hast Ich hab das mit Deinem Beispiel durch sukzessives Ergänzen
weiterer a an das voluptua getestet: Auch dann bekam ich mit Deinem
Beispiel geringfügige overfull hboxes (maximal 0,7pt), aber bevor etwas
sichtbar in den Rand ragte, wurde doch rechtzeitig das komplette Zitat
umbrochen.

Gruß -- Olaf Meltzer

Gilbert Mirenque

unread,
Jun 4, 2010, 9:47:10 AM6/4/10
to

> % Cite mit hbox
> \let\OldCite\cite
> \newcommand{\NewCite}[2][\empty]{\hbox{\OldCite[#1]{#2}}}
> \let\cite\NewCite

% Cite mit hbox
\let\OldCite\cite

\newcommand{\NewCite}[2][\empty]{\ifthenelse{\NOT\equal\#1\empty}{\mbox{\OldCite[#1]{#2}}}{\mbox{\OldCite{#2}}}}
\let\cite\NewCite

damit und natürlich \usepackage{ifthen} geht es auch nicht, das Komma
nur zu setzen, wenn auch das optionale Argument wirklich vorkommt.
Jemand ne Idee?

Olaf Meltzer

unread,
Jun 4, 2010, 10:21:05 AM6/4/10
to
* Gilbert Mirenque schrieb:

In Anlehnung an Goossens u.a. "Der LaTeX-Begleiter" (4. unveränderter
Nachdruck 1998, Seite 387, Abschnitt 13.1.1 Anpassen der
Literaturverweise) bekommst Du Deine bedingte Fassung so:

\makeatletter
\renewcommand{\@cite}[2]{%
\mbox{[{#1\ifthenelse{\boolean{@tempswa}}{, #2}{}]}}}
\makeatother

Damit bleibt aber doch das Problem, daß so ein Zitat u.U. in den Rand
ragt, und händische Korrektur erfordert.

Olaf Meltzer

unread,
Jun 4, 2010, 10:22:15 AM6/4/10
to
* Gilbert Mirenque schrieb:

> % Cite mit hbox
> \let\OldCite\cite
> \newcommand{\NewCite}[2][\empty]{\ifthenelse{\NOT\equal\#1\empty}
{\mbox{\OldCite[#1]{#2}}}{\mbox{\OldCite{#2}}}}
> \let\cite\NewCite
>
> damit und natürlich \usepackage{ifthen} geht es auch nicht, das Komma
> nur zu setzen, wenn auch das optionale Argument wirklich vorkommt.
> Jemand ne Idee?

In Anlehnung an Goossens u.a. "Der LaTeX-Begleiter" (4. unveränderter

Nachdruck 1998, Seite 387, Abschnitt 13.1.1 Anpassen der
Literaturverweise) bekommst Du Deine bedingte Fassung so:

\makeatletter
\renewcommand{\@cite}[2]{%
\mbox{[{#1\ifthenelse{\boolean{@tempswa}}{, #2}{}]}}}
\makeatother

Damit bleibt aber doch das Problem, daß so ein Zitat u.U. in den Rand
ragt, und händische Korrektur erfordert.

Gruß -- Olaf Meltzer

Gilbert Mirenque

unread,
Jun 4, 2010, 11:49:59 AM6/4/10
to
Danke Olaf,

>
> \makeatletter
> \renewcommand{\@cite}[2]{%
> \mbox{[{#1\ifthenelse{\boolean{@tempswa}}{, #2}{}]}}}
> \makeatother

Damit wäre das erste Problem gelöst. Gefällt mir. Ich hänge trotzdem
nochmal ein Beispiel, wo man optisch auch wirklich sieht, dass Zitate
überstehen können. Die paar zusätzlichen Zeilen vor der Referenz sind
zum Vergleich da - so sieht man es sehr gut, wie weit die Referenz
übersteht. Vielleicht hat ja jemand doch noch eine Idee, wie man die
Regeln zum Zeilenumbruch hier irgendwie dazu bringen könnte, vor der
Referenz zu greifen.

testbib.bib
bibtex_pagebreak.tex

Heiko Oberdiek

unread,
Jun 4, 2010, 1:02:26 PM6/4/10
to
Olaf Meltzer <om-ne...@arcor.de> wrote:

> * Heiko Oberdiek schrieb:
>
> >> voluptua \hbox{\cite[S.~148ff]{Kerievsky2005}}.
> >
> > Besser ist \mbox, \hbox beginnt im vertikalen Modus keinen Absatz.
>
> Machte sich das bemerkbar, falls innerhalb der \cite-Expansion eine neue
> Zeile nötig würde? Irgendwie kann ich mir sonst keine Situation
> vorstellen, in der "\cite im vertikalen Modus" benutzt würde, also
> vermutlich der Beginn der Zitatausgabe auf eine neue Zeile umbrochen und
> gleichzeitig ein neuer Absatz (dann ja mit Einzug oder Abstand) erzeugt
> werden müßte.

Wenn man mit \cite einen neuen Absatz starten möchte, führt das
\hbox dazu, dass das in einer Box *vor* dem folgenden Absatz gesetzt
wird. Mit \mbox hat man dieses Problem nicht, da das zusätzlich
zur \hbox vorher ein \leavevmode ausführt.

--
Heiko Oberdiek

Olaf Meltzer

unread,
Jun 4, 2010, 1:04:37 PM6/4/10
to
* Gilbert Mirenque schrieb:

> Vielleicht hat ja jemand doch noch eine Idee, wie man die
> Regeln zum Zeilenumbruch hier irgendwie dazu bringen könnte, vor der
> Referenz zu greifen.

Darauf zu bestehen, schon vor dem Zitatvermerk zu umbrechen, ist
bestimmt nicht sinnvoll. Dann beschränke lieber die \mbox{} auf den
Bereich der Anmerkung.

\makeatletter
% \renewcommand{\@cite}[2]{%

% \mbox{[{#1\ifthenelse{\boolean{@tempswa}}{, #2}{}]}}}

\renewcommand{\@cite}[2]{%
[{#1\ifthenelse{\boolean{@tempswa}}{, \mbox{#2}}{}]}}
\makeatother

Ich nehme auf Heikos Rat hin \mbox{} statt \hbox{}.

Heiko Oberdiek

unread,
Jun 4, 2010, 1:17:38 PM6/4/10
to
Gilbert Mirenque <form...@gmx.de> wrote:

> voluptua \cite[S.~148ff]{Kerievsky2005}.

Die im Thread beschriebene Box-Lösung hat den Nachteil, dass
Leerzeichen innerhalb des Zitates nicht wie die anderen
Wortzwischenräume in der Zeile gedehnt oder gestaucht werden.
Zudem kommt das Trennproblem bei langen Zitaten dazu.

Alternativ kann man die Trennstelle bevor der Seitenangabe
auch im \cite-Befehl durch Austausch des vorigen Leerzeichens
mit "~" erriechen:

\cite[\unskip~S.~148\,ff.]{Kerievsky2005}

--
Heiko Oberdiek

Olaf Meltzer

unread,
Jun 4, 2010, 1:20:16 PM6/4/10
to
* Ich (Olaf Meltzer) schrieb:

> Darauf zu bestehen, schon vor dem Zitatvermerk zu umbrechen, ist
> bestimmt nicht sinnvoll. Dann beschränke lieber die \mbox{} auf den
> Bereich der Anmerkung.

Ach nein, auch das funktioniert wieder nicht mit langen Anmerkungen. Ich
fürchte, um gelegentliches Nachbessern in der von Heiko beschriebenen
Art kommt man nicht herum. :-(

Gilbert Mirenque

unread,
Jun 5, 2010, 4:42:25 AM6/5/10
to
Hi Heiko,

> \cite[\unskip~S.~148\,ff.]{Kerievsky2005}
>

das sieht im Vereinzelten sehr gut aus

Gilbert Mirenque

unread,
Jun 5, 2010, 4:45:13 AM6/5/10
to
Ich will mich für eure tatkräftige Hilfe bedanken. Hätte nicht geahnt,
dass das Problem doch so einige Knackpunkte besitzt. Ich konnte dadurch
wiedermal ein paar Dinge dazulernen. Um das hier zum Abschluss zu
bringen: ich werde im Einzelfall dann nun doch manuell korrigieren.

Viele Grüße,
Gilbert

0 new messages