Ich habe folgendes Problem: Mein BibTeX-bib-File enthält folgenden
Eintrag
(entscheidender Punkt: Länge des url-Teils; url-Teil wird (später)
_nicht_ durch
bst in url-Kommando gepackt)
============= Minimalbeispiel bib =========================
@inproceedings{KABK1996UADFAAOACD,
title = {{U}se of {A}utomatically {D}efined {F}unctions and
{A}rchitecture-{A}ltering {O}perations in {A}utomated {C}ircuit {S}
ynthesis {U}sing {G}enetic {P}rogramming},
author = {John R. {Koza} and David {Andre} and Forrest H.
{Bennett III} and Martin A. {Keane}},
booktitle = {{P}roceedings of the {F}irst {A}nnual {C}onference
{G}enetic {P}rogramming ({GP}-96)},
year = {1996},
pages = {132--149},
url = {\url{http://citeseer.ist.psu.edu/119355.html}, \url
{http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.51.3933}
{\lastandname} \url{https://eprints.kfupm.edu.sa/74269/1/74269.pdf}
\accessed{2009-06-16}},
}
============= Ende Minimalbeispiel bib ====================
Besser gesagt, es hat viele Einträge dieser Art, die alle prima
funktionieren
und mit meinem spezialisierten bst-Style problemlos zusammenarbeiten.
Das Problem hat auch nicht wirklich was mit dem Inhalt des Eintrags an
sich zu tun, als mit seiner Länge: BibTeX produziert nämlich
folgendes .bbl-File:
============= Auszug bbl ====================
....
\newblock {\fullyavailablename}~\url{http://citeseer.ist.psu.edu/
119355.html},
\url{http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.51.3933}
{\lasta%
ndname} \url{https://eprints.kfupm.edu.sa/74269/1/74269.pdf}
\accessed{2009-06-16}.
....
============= Ende Auszug bbl ===============
Wie man sehen kann, fügt BibTeX nach maximal 80 Zeichen
einen Zeilenumbruch ein, den es mit % sichert. Leider landet
dies mitten in dem {\lastandname}-Kommando und führt dann
dazu, dass LaTeX sich weigert, das Dokument zu kompilieren.
(Das LaTeX-Minimalbeispiel schenke ich mir hier mal).
Gibt es eine Möglichkeit, dem BibTeX das mit den
Zeilenumbrüchen auszureden? Mein bib-File wird automatisch
generiert, es bringt also nichts, das von Hand zu bearbeiten.
Alternativ könnte ich einen Post-Prozessor machen, der
die BibTeX-Zeilenumbrüche wieder rausmacht, aber vorher
wollte ich lieber fragen :-)
Danke,
Thomas.
> Wie man sehen kann, f�gt BibTeX nach maximal 80 Zeichen
> einen Zeilenumbruch ein, den es mit % sichert. Leider landet
> dies mitten in dem {\lastandname}-Kommando und f�hrt dann
> dazu, dass LaTeX sich weigert, das Dokument zu kompilieren.
Eigentlich sollte url oder hyperref das reparieren.
http://www.tex.ac.uk/cgi-bin/texfaq2html?label=citeURL
(Ganz am Ende).
> (Das LaTeX-Minimalbeispiel schenke ich mir hier mal).
Dann schenke ich mir mal das Testen.
--
Ulrike Fischer
blablabla{\lastandname}blablabla
im in irgendeinem Feld im bib-File (von mir aus auch in note)
langerTextMitVielBlablabla{\lastan%
dname}blablabla
Da hat kein Package eine Chance gegen. Aber ist nicht
weiter wild, mit einem trivialen Programm kann man diese
newlines wieder wegzaubern. Das ist zwar keine schöne
Lösung, aber sie geht. Deshalb wollte ich fragen, ob BibTeX
vielleicht einen (in --help nicht dokumentierten) Parameter
hat, wo man das mit den 80 Zeichen ausschalten kann,
oder ob man das vielleicht im bst-File festlegen kann
(wobei aber entry.max$ und global.max$ scheinbar
für was anderes gut sind).
Aktuelle Lösung: Postprozessor wie folgt (Kommandozeilen-
Parameter = Pfad des bbl-Files
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
/**
* The main class of the newline remover: BibTeX has the habit to cut
off
* lines after 80 characters and, if no spaces are close enought,
doing
* this by force by placing a '%' at the line end. This tends to mess
up
* if the new line end happens to occur inside a LaTeX command.
Therefore,
* with this trivial tool, all such line breaks are removed again so a
* subsequent LaTeX run will work.
*/
public class Main {
/**
* The main routine
* @param params
* the parameters of the main program
*/
public static final void main(final String[] params) {
String src;
File f1, f2;
BufferedReader r1;
BufferedWriter r2;
String s;
int i;
boolean lwnl;
if ((params == null) || (params.length < 1))
return;
src = params[0];
if (src == null)
return;
src = src.trim();
if (src.length() < 1)
return;
try {
f1 = new File(src).getCanonicalFile();
f2 = new File(src + ".tmp").getCanonicalFile(); //$NON-NLS-1$
r1 = new BufferedReader(new FileReader(f1));
try {
r2 = new BufferedWriter(new FileWriter(f2));
try {
lwnl = true;
while ((s = r1.readLine()) != null) {
i = s.length();
if ((i > 0) && (s.charAt(i - 1) == '%')) {
r2.write(s.substring(0, i - 1));
lwnl = false;
} else {
r2.write(s);
r2.newLine();
lwnl = true;
}
}
if (!lwnl)
r2.newLine();
} finally {
r2.close();
}
} finally {
r1.close();
}
f1.delete();
f2.renameTo(f1);
} catch (Throwable t) {
t.printStackTrace();
}
}
}
Können sie nicht, da der split nicht in einer URL auftritt:
BibTeX macht aus
langerTextMitVielBlablabla{\lastandname}blablabla
>> Eigentlich sollte url oder hyperref das reparieren.
> K�nnen sie nicht, da der split nicht in einer URL auftritt:
> BibTeX macht aus
>
> blablabla{\lastandname}blablabla
>
> im in irgendeinem Feld im bib-File (von mir aus auch in note)
>
> langerTextMitVielBlablabla{\lastan%
> dname}blablabla
>
> Da hat kein Package eine Chance gegen.
Das hatte ich nicht genau gelesen. Aber wenn dein bib-automatisch
generiert wird, kann es dann nicht auch automatisch *vor* diesen
Befehlen wie \lastandname Zeilenumbr�che einf�gen?
%
{\lastandname} und weiter ....
--
Ulrike Fischer
Im Moment bleibe ich erstmal beim Post-Prozessor, weil mein
bib-File-Generator die Zeilen teilweise in Häppchen schreibt.
Dadurch kann ich nicht so einfach die Zeichen zählen und
müsste dann vor jedem Befehl immer einen Zeilenumbruch
machen, wodurch das bib-File dann recht häßlich aussieht,
oder mich sehr arg verrenken um doch zu zählen und irgendwie
zu versuchen, nur Umbrüche zu setzen wo notwendig.
Am besten wäre es, wenn ich dem BibTeX sagen könnte,
es soll keine Umbrüche machen. Ich vermute, dass diese
sowieso nur der Ästethik des bbl-Files dienen (und da
ist mir ein hübsches bib-File wichtiger).
Thomas.
>> Aber wenn dein bib-automatisch generiert wird, kann es dann nicht
>> auch automatisch *vor* diesen Befehlen wie \lastandname
>> Zeilenumbr�che einf�gen?
> Das w�re eine weitere Option, wobei diese auch nur ein wenig
> eleganter ist, als das Post-Processing. Das grundlegende Problem
> ist meiner Meinung nach, dass BibTeX diese Umbr�che automatisch
> reinmacht, ohne zu pr�fen, ob sie mitten in einem Kommando oder
> einem Parameter eines Kommandos auftreten.
Eine weitere M�glichkeit w�re den Befehl als
\csname lastname\endcsname zu schreiben. Da w�re der Zeilenumbruch
harmlos.
--
Ulrike Fischer
Trotzdem Danke,
Thomas.
>> Eine weitere M�glichkeit w�re den Befehl als
>> \csname lastname\endcsname zu schreiben. Da w�re der Zeilenumbruch
>> harmlos.
> Es sei denn, er tritt dann als
> \csna%
> me
> auf :-(
Stimmt. ;-)
--
Ulrike Fischer