From 066cdace62af6f25e9e29249aa0325cc247b132b Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Tue, 9 Feb 2016 11:29:16 +0100 Subject: [PATCH 1/1] =?utf8?q?HTML-zu-LaTeX:=20diverse=20Sonderf=C3=A4lle?= =?utf8?q?=20bzgl.=20Zeilenumbr=C3=BCchen=20behandeln?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- SL/Template/LaTeX.pm | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/SL/Template/LaTeX.pm b/SL/Template/LaTeX.pm index 352f793e1..8a579ef46 100644 --- a/SL/Template/LaTeX.pm +++ b/SL/Template/LaTeX.pm @@ -66,6 +66,13 @@ my %html_replace = ( '
' => "\\newline ", ); +sub _lb_to_space { + my ($to_replace) = @_; + + my $vspace = '\vspace*{0.5cm}'; + return $vspace x (length($to_replace) / length($html_replace{'
'})); +} + sub _format_html { my ($self, $content, %params) = @_; @@ -86,7 +93,11 @@ sub _format_html { } 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; } -- 2.20.1