dreizehn28
18-11-2011, 15:16
Hallo zusammen,
Ich spiele derzeit an einem eigenen Bibstyle mit Internetquellen (@ELECTRONIC) und habe mir dafür eine kleine Funktion geschrieben, welche einen String nach gewissen Zeichen durchsucht und diese ersetzt. Ziel ist es, eine URL so auszugeben, dass LaTeX nicht meckert. Z. B. wegen "_". Also "_" durch "\_" ersetzen.
Alles funktioniert prima. Das Ergebnis stimmt. Aber BibTeX gibt haufenweise Fehlermeldungen aus. Ich bin mir sicher, dass bei jedem Aufruf von substring$ ein Fehler entsteht. Dabei scheint BibTeX ein Problem damit zu haben, dass meine Substrings die Länge 1 haben.
Wie unterbindet man diese Fehlermeldungen? Immerhin macht BibTeX ja das richtige... Oder hat jemand eine bessere Funktion zum Ersetzen? text.length$ kann ja auch zu Problemen führen!
STRINGS { str.to.replace replacement }
INTEGERS { string.length }
FUNCTION { string.replace }
{
'replacement :=
'str.to.replace :=
duplicate$ text.length$ 'string.length :=
#1 'i :=
{ i #1 + string.length < }
{
duplicate$ i #1 substring$ str.to.replace =
{
duplicate$ i #1 - text.prefix$
replacement *
swap$ i #1 + string.length substring$ *
duplicate$ text.length$ 'string.length :=
i replacement text.length$ + str.to.replace text.length$ - 'i :=
}
'skip$
if$
i #1 + 'i :=
}
while$
}
FUNCTION {output.url}
{
url duplicate$
empty$ not
{
duplicate$ "http://" swap$ #7 text.prefix$ =
{ duplicate$ text.length$ #7 - #8 swap$ substring$ }
'skip$
if$
% Sonderzeichen ersetzen
"_" "\_" string.replace
"&" "\&" string.replace
"#" "\#" string.replace
"$" "\$" string.replace
%Umbrüche einfügen
"/" "/" quote$ quote$ * * string.replace
"\small \texttt{" swap$ *
"}\normalsize " * write$
}
'pop$
if$
}
Bin für jeden Input dankbar!
Ich spiele derzeit an einem eigenen Bibstyle mit Internetquellen (@ELECTRONIC) und habe mir dafür eine kleine Funktion geschrieben, welche einen String nach gewissen Zeichen durchsucht und diese ersetzt. Ziel ist es, eine URL so auszugeben, dass LaTeX nicht meckert. Z. B. wegen "_". Also "_" durch "\_" ersetzen.
Alles funktioniert prima. Das Ergebnis stimmt. Aber BibTeX gibt haufenweise Fehlermeldungen aus. Ich bin mir sicher, dass bei jedem Aufruf von substring$ ein Fehler entsteht. Dabei scheint BibTeX ein Problem damit zu haben, dass meine Substrings die Länge 1 haben.
Wie unterbindet man diese Fehlermeldungen? Immerhin macht BibTeX ja das richtige... Oder hat jemand eine bessere Funktion zum Ersetzen? text.length$ kann ja auch zu Problemen führen!
STRINGS { str.to.replace replacement }
INTEGERS { string.length }
FUNCTION { string.replace }
{
'replacement :=
'str.to.replace :=
duplicate$ text.length$ 'string.length :=
#1 'i :=
{ i #1 + string.length < }
{
duplicate$ i #1 substring$ str.to.replace =
{
duplicate$ i #1 - text.prefix$
replacement *
swap$ i #1 + string.length substring$ *
duplicate$ text.length$ 'string.length :=
i replacement text.length$ + str.to.replace text.length$ - 'i :=
}
'skip$
if$
i #1 + 'i :=
}
while$
}
FUNCTION {output.url}
{
url duplicate$
empty$ not
{
duplicate$ "http://" swap$ #7 text.prefix$ =
{ duplicate$ text.length$ #7 - #8 swap$ substring$ }
'skip$
if$
% Sonderzeichen ersetzen
"_" "\_" string.replace
"&" "\&" string.replace
"#" "\#" string.replace
"$" "\$" string.replace
%Umbrüche einfügen
"/" "/" quote$ quote$ * * string.replace
"\small \texttt{" swap$ *
"}\normalsize " * write$
}
'pop$
if$
}
Bin für jeden Input dankbar!