Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 066cdace

Von Moritz Bunkus vor etwa 9 Jahren hinzugefügt

  • ID 066cdace62af6f25e9e29249aa0325cc247b132b
  • Vorgänger 31e6d33a
  • Nachfolger 2ee1acf2

HTML-zu-LaTeX: diverse Sonderfälle bzgl. Zeilenumbrüchen behandeln

Zeilenumbrüche an verschiedenen Stellen sorgten dafür, dass LaTeX die
Fehlmerldung »There's no line to end here« ausspuckte. Die folgenden
Sonderfälle werden nun abgefangen und in \vspace*-Anweisungen
umgewandelt:

✓ Zeilenumbrüche direkt am Anfang des Texts
✓ Zeilenumbrüche direkt am Anfang eines Absatzes
✓ Zeilenumbrüche nach Umgebungen wie Strich- und Aufzählugnslisten

Zusätzlich werden Zeilenumbrüche am Ende des Texts schlicht entfernt.

Unterschiede anzeigen:

SL/Template/LaTeX.pm
'<br>' => "\\newline ",
);
sub _lb_to_space {
my ($to_replace) = @_;
my $vspace = '\vspace*{0.5cm}';
return $vspace x (length($to_replace) / length($html_replace{'<br>'}));
}
sub _format_html {
my ($self, $content, %params) = @_;
......
} split(m{(<.*?>)}x, $content);
$content = join '', @parts;
$content =~ s{ (?: [\n\s] | \\newline )+$ }{}gx;
$content =~ s{ (?: [\n\s] | \\newline )+ $ }{}gx; # remove line breaks at the end of the text
$content =~ s{ ^ \s+ }{}gx; # remove white space at the start of the text
$content =~ s{ ^ ( \\newline \ )+ }{ _lb_to_space($1) }gxe; # convert line breaks at the start of the text to vertical space
$content =~ s{ ( \n\n+ ) ( \\newline \ )+ }{ $1 . _lb_to_space($2) }gxe; # convert line breaks at the start of a paragraph to vertical space
$content =~ s{ ( \\end\{ [^\}]+ \} \h* ) ( \\newline \ )+ }{ $1 . _lb_to_space($2) }gxe; # convert line breaks after LaTeX environments like lists to vertical space
return $content;
}

Auch abrufbar als: Unified diff