Revision 066cdace
Von Moritz Bunkus vor fast 9 Jahren hinzugefügt
SL/Template/LaTeX.pm | ||
---|---|---|
66 | 66 |
'<br>' => "\\newline ", |
67 | 67 |
); |
68 | 68 |
|
69 |
sub _lb_to_space { |
|
70 |
my ($to_replace) = @_; |
|
71 |
|
|
72 |
my $vspace = '\vspace*{0.5cm}'; |
|
73 |
return $vspace x (length($to_replace) / length($html_replace{'<br>'})); |
|
74 |
} |
|
75 |
|
|
69 | 76 |
sub _format_html { |
70 | 77 |
my ($self, $content, %params) = @_; |
71 | 78 |
|
... | ... | |
86 | 93 |
} split(m{(<.*?>)}x, $content); |
87 | 94 |
|
88 | 95 |
$content = join '', @parts; |
89 |
$content =~ s{ (?: [\n\s] | \\newline )+$ }{}gx; |
|
96 |
$content =~ s{ (?: [\n\s] | \\newline )+ $ }{}gx; # remove line breaks at the end of the text |
|
97 |
$content =~ s{ ^ \s+ }{}gx; # remove white space at the start of the text |
|
98 |
$content =~ s{ ^ ( \\newline \ )+ }{ _lb_to_space($1) }gxe; # convert line breaks at the start of the text to vertical space |
|
99 |
$content =~ s{ ( \n\n+ ) ( \\newline \ )+ }{ $1 . _lb_to_space($2) }gxe; # convert line breaks at the start of a paragraph to vertical space |
|
100 |
$content =~ s{ ( \\end\{ [^\}]+ \} \h* ) ( \\newline \ )+ }{ $1 . _lb_to_space($2) }gxe; # convert line breaks after LaTeX environments like lists to vertical space |
|
90 | 101 |
|
91 | 102 |
return $content; |
92 | 103 |
} |
Auch abrufbar als: Unified diff
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.