Aufzählungen von Word/HTML nach LaTeX konvertieren

Das folgende Skript habe ich mir gebastelt, um Word-Aufzählungen in LaTeX zu konvertieren. Gerade wenn es mehrere Ebenen sind, ist es in Word einfach jedes Mal wieder nervig, die Ebenen zu koordinieren. Als das aktuelle (!) Word 2007 es dann doch geschafft hat, Einzüge zu machen, wo sie keinen Sinn machen, hat es gereicht und ordentlicher Textsatz musste her — LaTeX.

Hier das AutoIt-Skript, dass die Konvertierung besorgt:

#include <File.au3>
#include <Array.au3>
 
; Definitions
Global $lvlMatch[4] = ["^\s*\d*\.\s*(.*)", "^\s*[a-z]\.\s*(.*)", "^\s*[ivx]*\.\s*(.*)", "^\s*\d*\.\s*(.*)"]
Global $data
_FileReadToArray(@ScriptDir & "\input.txt", $data)
_ArrayDelete($data, 0)
Global $levels[UBound($data)]
 
; Levels herausfinden
For $i = 0 To UBound($data) - 1
	$levels[$i] = -1 ; Default (= no explicit match)
	For $j = UBound($lvlMatch) - 1 To 0 Step -1 ; zu hoch raten im Notfall
		If StringRegExp($data[$i], $lvlMatch[$j], 0) Then
			$levels[$i] = $j
			$data[$i] = StringRegExpReplace($data[$i], $lvlMatch[$j], "\1", 1)
			ContinueLoop 2
		EndIf
	Next
Next
 
; 0/3-Fix
_ArrayInsert($data, 0, "")
_ArrayInsert($levels, 0, -1)
 
For $i = 1 To UBound($data) - 2 ; !
	If (($levels[$i] = 3) And ($levels[$i + 1] = 1)) OR (($levels[$i] = 3) And (StringRegExp($data[$i - 1], "^\s*$", 0))) Then
		$levels[$i] = 0
	EndIf
Next
 
; Fix für Ende
_ArrayAdd($data, "")
_ArrayAdd($levels, 0)
 
; Output generieren
$currLevel = -1
$output = ""
For $i = 0 To UBound($data) - 1
	$newLevel = $levels[$i]
	If $newLevel <> -1 Then
		; runter
		if $newLevel > $currLevel Then
			$output = $output & "\begin{enumerate}" & @CRLF
		EndIf
		; (u.U. mehrfach!) hoch
		while $newLevel < $currLevel
			$output = $output & "\end{enumerate}" & @CRLF
			$currLevel -= 1
		WEnd
 
		$currLevel = $newLevel
	EndIf
 
	If StringRegExp($data[$i], "^\s*$", 0) = 0 Then
		if $levels[$i] = 0 Then
			$output = $output & "\item \hl{" & $data[$i] & "}" & @CRLF
		Else
			$output = $output & "\item " & $data[$i] & @CRLF
		EndIf
	else
		$output = $output & @CRLF
	EndIf
Next
$output &= "\end{enumerate}"
 
; verschönern
$output = StringReplace($output, @CRLF & "\end{enumerate}", "\end{enumerate}" & @CRLF)
 
; schreiben
$fhndl = FileOpen(@ScriptDir & "\output.txt", 2)
FileWrite($fhndl, $output)
FileClose($fhndl)

Das Skript erwartet eine input.txt in seinem Verzeichnis und schmeißt den LaTeX-Schnipsel in der Datei output.txt raus.
Die regulären Ausdrücke zur Erkennung der Aufzählungszeichen lassen sich oben anpassen.

Der Code steht unter der GPLv3-Lizenz.

Viel Spaß damit,
Johannes

Dieser Beitrag wurde unter AutoIt, LaTeX, Programmieren veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Eine Antwort auf Aufzählungen von Word/HTML nach LaTeX konvertieren

  1. Maiksch sagt:

    Funktioniert super, habe es schon ausprobiert und bin froh, dass ich mein chaotisches Worddokument so leicht nach LaTeX retten konnte.

    Danke, Johannes!

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">