Wrapper für gängige LaTeX-Compiler

    • VB.NET
    • .NET (FX) 4.5–4.8

    Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von J.Herbrich.

      Wrapper für gängige LaTeX-Compiler

      Hallo liebe Community,

      Ich habe mich vor kurzem damit beschäftigt, Dokumente(in meinem Fall waren's RTF-Dateien) zu einem PDF-Dokument zusammenzufügen. Ich dachte mir, dass sich das doch mit machen liesse und spielte etwas mit den nativen Anbindungen von Mik herum. Da ich das aber nicht so schön fand, die Argumente so ungeordnet anzuhängen, habe ich für die gängisten -Compiler Wrapper-Klassen geschrieben. Damit lassen sich nun relativ bequem PDF-Dokumente erstellen.
      Ich habe aber aus Faulheit nicht jede Kommandozeilenoption kommentiert. Bei ein paar Compilern genügt ein Aufruf mit dem "-help"-Flag - bei anderen habe ich einen Link zur Doku hinterlassen.
      Die Kompilierer habe ich alle soweit getestet(ok, nicht alle Optionen, aber genügend viele) und können eingesetzt werden.
      PS: Der Wrapper ist eigentlich für jene gedacht, die schon etwas Erfahrung mit LaTeX haben.

      Klassendiagramm


      Beispielcode
      Kompiliere .tex zu .pdf mit PdfLaTeX, schreibe Status und Zeit und lösche Temorärdateien(.log, .aux)

      VB.NET-Quellcode

      1. Dim texFilepath = String.Empty
      2. Dim outFile = String.Empty
      3. Dim tempDir = String.Empty
      4. Using PdfLatex As New PdfLaTeXCompiler(texFilepath)
      5. With PdfLatex
      6. .SyncTeX = 1
      7. .InteractionMode = InteractionModeType.Nonstopmode
      8. .AuxDirectory = tempDir
      9. .OutputDirectory = Path.GetDirectoryName(texFilepath)
      10. .TimeStatistics = True
      11. End With
      12. Console.ForegroundColor = ConsoleColor.Green
      13. Console.WriteLine("Führe aus:")
      14. Console.WriteLine(PdfLatex.BuildCommand)
      15. PdfLatex.Execute()
      16. Console.ForegroundColor = ConsoleColor.White
      17. Using output = PdfLatex.OutputStream
      18. While Not output.EndOfStream
      19. Console.WriteLine(output.ReadLine())
      20. End While
      21. End Using
      22. Console.ForegroundColor = ConsoleColor.Red
      23. Using errorStr = PdfLatex.ErrorStream
      24. While Not errorStr.EndOfStream
      25. Console.WriteLine(errorStr.ReadLine())
      26. End While
      27. End Using
      28. outFile = PdfLatex.OutputPath
      29. PdfLatex.DeleteTempFiles()
      30. Console.ForegroundColor = ConsoleColor.Cyan
      31. Console.WriteLine("Temporärdateien gelöscht")
      32. Console.WriteLine("Erzeugte Datei: ""{0}""", outFile)
      33. End Using


      Kompiliere .tex zu .pdf mit PdfLaTeX - asynchron

      VB.NET-Quellcode

      1. Dim texFilepath = String.Empty
      2. Dim outFile = Await PdfLaTeXCompiler.Compile(texFilepath)


      Die restlichen Kompilierer funktionieren nahezu analog zu den obigen beiden Beispielen.

      Nutzung
      Was für welchen Anwendungszweck?
      • : .tex -> .dvi
      • : .tex -> .dvi (umfangreicher als )
      • Lua: .tex -> .pdf (Lua-Scripting)
      • Pdf: .tex -> .pdf (normal erste Wahl)
      • Xe: .tex -> .pdf (umfangreicheres Encoding als Pdf, falls benötigt)
      • Bib: .aux -> .bbl (für Literaturverzeichnisse etc.)
      • DviPdfM: .dvi -> .pdf
      • DviPdfMX: .dvi -> .pdf (bevorzugt)
      • DviPs: .dvi -> .ps
      • Ps2Pdf: .ps -> .pdf (Pdf-1.4)
      • Ps2Pdf12: .ps -> .pdf (Pdf-1.2)
      • Ps2Pdf13: .ps -> .pdf (Pdf-1.3)
      • Ps2Pdf14: .ps -> .pdf (Pdf-1.4)


      Anforderungen
      • Microsoft .Net-Framework 4.5 (für Async/Await)
      • MiK 2.9


      Verwendete Software
      • Visual Studio Ultimate 2013
      • Microsoft .Net-Framework 4.5


      Download
      Siehe Anhang (58'433 B / 57 KiB)
      Dateien
      • LaTeX.vb

        (58,43 kB, 232 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Higlav“ ()

      Sehr nettes Programm. Async Await geht mit jeden Netframework, es wurde in VIsual Basic 2013 eingeführt und ist somit (so weit ich weiß) ehr eine Visual Studio geschichte.

      LG, J.Herbrich

      J.Herbrich schrieb:

      Async Await geht mit jeden Netframework

      Nö. Gibt es erst seit .NET 4.5. Kann man via Nugget auch mit .NET 4.0 zum Laufen bringen.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

      J.Herbrich schrieb:

      Sehr nettes Programm.

      Danke. ^^

      J.Herbrich schrieb:

      Async Await geht mit jeden Netframework, es wurde in VIsual Basic 2013 eingeführt und ist somit (so weit ich weiß) ehr eine Visual Studio geschichte.

      Async-Await mit der Task.Run-Methode geht erst ab 4.5 - bei 4.0 muss mal glaube ich etwas mit Async-Await und Threads basteln("Async" am Ende der Methode etc.), was ich nicht so schön finde und 3.5 und niedriger schmeissen Fehler, als hätte ich Kyrillische Schlüsselwörter benutzen wollen. Von da her sehe ich nicht so ganz, wie du darauf kommst, es sei nur ein optisches Zückerchen der VS-Version und .Net-FW-unabhängig. 8| Oder habe ich dich irgendwie falsch verstanden?

      EDIT: Ahh. Trade war schneller. ^^
      Task.Run giebt es so weit ich weiß auch in 4.0 und Async Wait ist defakto eine Visual Studio sache, wo bei man als "Hack" den VS2013/2015RC Complirer austauschen kann. Aber selbst da würde die IDE (Editor) mit einen Fehler abbrechen.

      Und der selbe zustand kommt auch beim .NET4.5 unter 2010.

      LG, J.Herbrich
      @J.Herbrich Nein, nein. TAP gibt es erst seit .NET 4.5. Das hat mit Visual Studio nichts zu tun. Man kann das Ganze via Microsoft.Bcl nachrüsten, damit es mit .NET 4.0 läuft, das ist aber auch alles.
      Ich würde Dich bitten, keine Aussagen zu treffen, wo Du Dir nicht sicher bist oder nicht richtig bescheid weißt und anderen ruhig auch etwas zu glauben und das dann so aufzunehmen. Das kommt jetzt übrigens von mir als Benutzer, nicht moderativ.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Strike angenommen. werde ich mir merken und besser machen. Aber das überascht mich wircklich. Man lernt ja nicht aus :)