Schrift
[thread]11697[/thread]

Einbettung externe Fußnoten in HTML-Hauptdokument



<< >> 5 Einträge, 1 Seite
PLS
 2008-04-24 02:31
#108798 #108798
User since
2008-04-24
5 Artikel
BenutzerIn
[default_avatar]
Liebe Liste,

ich habe folgendes Problem: Ich wandele wissenschaftliche LaTeX-Dokumente mit TeX4ht in HTML um. Dabei wird ein Hauptdokument erzeugt, welches Links auf zahlreiche zusätzlich automatisch erstellte HTML-Seiten beinhaltet, die jeweils nur eine Fußnote enthalten. Mir wurde ein Perl-Skript zur Verfügung gestellt, welches die Aufgabe hat, diese externen Fußnoten in einer Tabellenumgebung mit grauem Hintergrund in das HTML-Hauptdokument an der Stelle des entsprechenden Links einzubetten. Obwohl das Skript anscheinend früher von anderen bereits erfolgreich zu diesem Zweck eingesetzt wurde, hat es bei mir keine Auswirkung. Ich habe es auf zwei Plattformen getestet (Windows, XPHome und MacOSX 10.4 Perl-Version 5.8.6). Die Syntaxprüfung ergab keine Fehler. Andere Perl-Scripts funktionieren bei mir. Meine Perl-Kenntnisse sind leider noch sehr rudimentär. Ich wäre euch sehr dankbar, wenn ihr mir Hinweise geben könntet, wenn euch etwas in dem angehängten Skript auffällt. Ich habe es ein wenig gekürzt (hoffentlich nicht das Falsche!).


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use File::Copy;
@maintext = <>;
print STDERR "stripping EOLs off main document..."; # STDERR: Standardfehlerausgabe
for (@maintext) {chomp();}
print STDERR "done\njoining lines...";
$_ = join("\n", @maintext);
open(CLEAR_BAT, ">delfn.bat");
print CLEAR_BAT "\@echo off\n";
print STDERR "done\nstart substituting footnotes (this may take a while)...\n";
#s!<a\s+href="(.*?)"\s+id="\1"\s*><sup>(<span\s+class=[^>]*?>)?([0-9]+)(</span>)?</sup></a>!insert_fntext($3, $1)!ges;
s!<span class="footnote-mark"><a\s+href="(.*?)\#.*?"><sup >([0-9]+)</sup></a></span>!insert_fntext($2, $1)!ges;
print CLEAR_BAT "echo all footnote files deleted";
close(CLEAR_BAT);

print STDERR "file 'delfn.bat' created (can be used to remove the single footnote files)\n";
print $_;
print STDERR "ready\n";

# Fussnotentext aus uebergebener HTML-Datei holen und zurueckliefern
sub get_fntext   #sub: Unterroutine
{
    my $fnfile = shift;
    $fnfile =~ s/\s*(.*)\s*/$1/; # Leerzeichen am Anfang und Ende des Dateinamens entfernen
    open(FNOTE, "<".$fnfile) || print STDERR "footnote file '$fnfile' not found";
    print STDERR "processing footnote file '$fnfile'...";
    my @fntext = <FNOTE>;
    close(FNOTE);
    for (@fntext) {chomp();}
    my $fntext = join("\n", @fntext);
    $fntext =~ s!.*<body.*?><p class.+?>(.*)</body>.*!$1!s;
    print STDERR "done\n";
    return $fntext;
}

sub insert_fntext
{
    my ($fnum, $fnfile) = @_; # Fussnotenzahl und Name der Datei, die FN-Text enthaelt
    print CLEAR_BAT "del $fnfile\n";
    my $result = "<sup>$fnum</sup>";  # Fu&#64258;notenziffer im Text
    $result .= '<div align=right><table cols=1 width=70% bgcolor=#cccccc>';
    $result .= "<tr><td><font size=-1>\n";
#    $result .= "<sup>$fnum</sup> ".get_fntext($fnfile)."\n";
    $result .= get_fntext($fnfile)."\n";
    $result .= "</font></td></tr></table></div>";
#   my $result = "<font color=#ff0000> (<sup>$fnum</sup> ".get_fntext($fnfile).")</font>";
    return $result;
}


Danke für eure Mühe!

Lg, PLS
Linuxer
 2008-04-24 11:41
#108804 #108804
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

verwendest Du "use strict;" und "use warnings;" in dem Skript?

open() sollte immer auf Erfolg geprüft werden:

Code (perl): (dl )
open my $filehandle, '>', $file or die "$file: $!\n";


Beim Schreiben in eine Datei sollte das "print $filehandle $data" und auch das "close $filehandle" ebenfalls auf Erfolg geprüft werden.


Wenn Du auch noch Beispieldaten liefern könntest, wäre es einfacher, Dein Problem nachzuvollziehen.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
PLS
 2008-04-24 16:09
#108818 #108818
User since
2008-04-24
5 Artikel
BenutzerIn
[default_avatar]
Hi Linuxer,

danke für Deine Antwort. Ich habe jetzt die 3 Zeilen


Code (perl): (dl )
1
2
3
use strict;
use warnings;
use diagnostics;


in Zeile 18 und 24 gesetzt. Es gab nur mit einem von mir hier herausgekürzten Block zum Umgang mit Grafiken Probleme, mit dem geposteten Kode dagegen nicht. Wie man »open()«, »print $filehandle $data« und »close $filehandle« auf Erfolg prüft, habe ich leider noch nicht herausgefunden.

Ich kann Dir aber mal meine Vorgehensweise mit Beispieldaten und Ergebnissen liefern:

LaTex minimalbsp.tex
Code: (dl )
1
2
3
4
\documentclass[12pt]{article}
\begin{document}
Dies ist eine Fu\ss{}note:\footnote{Bli bla blub}
\end{document}


Wandle ich die Datei mit dem Paket TeX4ht in HTML um (Befehlszeile: htlatex minimalbsp.tex),
dann werden zwei HTML-Dateien erzeugt: minimalbsp.html enthält den Text mit verlinkter hochgestellter Fußnotenzahl: »Dies ist eine Fußnote:1«; minimalbsp2.html enthält den eigentlichen (verlinkten) Fußnotentext (»Bli bla blub«).

Das gepostete Perl-Skript sollte eigentlich den Inhalt aus minimalbsp2 in minimalbsp.html schreiben. Das Ganze sollte in HTML so aussehen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
<body>
Dies ist eine Fußnote:
<sup>1</sup><div align=right><table cols=1 width=70% bgcolor=#cccccc><tr><td><font size=-1>
<span class="footnote-mark">

<span
class="ecrm-0800"><sup>1</sup>&nbsp&nbsp Bli bla blub</span>

</span></dd></dl>

</font></td></tr></table></div>
<\body>


Wenn ich das Skript »fussnoten« über den Befehl »perl fussnoten.pl minimalbsp.html > test.html«
aufrufe, so wird eine neue Datei (test.html) erzeugt, die mit minimalbsp.html identisch ist. Die Fußnote wird also nicht eingebettet. (Bei einer Fußnote bräuchte man dieses Skript nicht, ich habe jedoch bei meiner letzten HTML-Umwandlung ca. 170 Fußnoten manuell in die HTML-Hauptdatei eingebettet). Könnte es sein, dass im Skript noch eine Anweisung zum Schreiben fehlt? Mit meinen minimalen perl-Kenntnissen konnte ich bisher noch keine entdecken.

Bin für jeden Hinweis dankbar!

Gruß, PLS
Linuxer
 2008-04-24 16:39
#108822 #108822
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
hm,

ich habe mal 2 Fußnoten in das LaTeX-Dokument gepackt und 2 Fußnoten-Dateien erhalten.

Sehe ich das richtig, dass Du also die Fußnoten aus 170 Dateien in das Hauptdokument übertragen hast?

[s]Wo sollen die Fußnoten eingebaut werden; am Ende vor dem schließenden Body-Tag? Oder jeweils direkt nach der Fußnote?[/s]

Der Fußnotenverweis soll also durch den Fußnotentext selbst ersetzt werden, versteh ich das richtig?
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
PLS
 2008-04-24 17:13
#108823 #108823
User since
2008-04-24
5 Artikel
BenutzerIn
[default_avatar]
Genau,

der angegebene HTML-Code bringt bei mir das erwünschte Ergebnis, also:

Dies ist eine Fußnote:^1 [hochgestellt]

^1 Bli bla blub [Fußnotentext vor grau unterlegtem Hintergrund]

...weiterer Text.
<< >> 5 Einträge, 1 Seite



View all threads created 2008-04-24 02:31.