\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?
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
\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.
> 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
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
% 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
> 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
>> 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.
> 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.
> 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
% 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.
> % 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
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.
> * 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
> 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{}.
> 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
> 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. :-(
> \cite[\unskip~S.~148\,ff.]{Kerievsky2005}
>
das sieht im Vereinzelten sehr gut aus
Viele Grüße,
Gilbert