OPUS4 / opus4-pdf

PDF support in OPUS 4 for instance to generate cover sheets or validate files.
Other
0 stars 0 forks source link

Konflikt mit Composer Package für "opus4-bibtex" #63

Closed j3nsch closed 1 year ago

j3nsch commented 1 year ago

Die BibTeX-Funktionalität ist zur Zeit gebrochen (Issue OPUS4/opus4-bibtex#63), weil es einen Konflikt zwischen den Composer Abhängigkeiten gibt. Für BibTeX wird ryakad/pandoc-php verwendet, für die PDF-Deckblätter ueberdosis/pandoc. Beide Packages definieren die Klasse Pandoc\Pandoc. Das ist bisher nicht aufgefallen, weil beide Package keine Unit Tests für die Integration in Application haben. Bei den Tests kommt dieser Konflikt also nicht zum Tragen.

j3nsch commented 1 year ago

Das Ryakad-Package wurde seit 2015 nicht mehr aktualisiert. Es macht daher vermutlich eher Sinn im BibTeX Code umzusteigen. Dabei sollte die neueste Version verwendet werden. Momentan wird 0.7.0 verwendet. Es gibt mittlerweile 0.9.0. Für die Versionsangabe in composer.json wird zwar '^verwendet, aber so wie angegeben sind die Versionen auf0.7.x` beschränkt.

https://getcomposer.org/doc/articles/versions.md#caret-version-range-

j3nsch commented 1 year ago

Im BibTeX-Code ist das eine Abhängigkeit des BibTeX-Parsers. Dieser müsste also komplett ausgetauscht werden. Wofür genau wird Pandoc bei den PDF-Deckblättern verwendet?

j3nsch commented 1 year ago

Im Augenblick sehe ich keine gute Alternative zum verwendeten BibTeX-Parser. Es muss geschaut werden, ob die gleiche Pandoc-Library für den DefaultPdfGenerator ausreichend ist.

Die Instanzierung des 'Pandoc'-Objektes sollte dabei gleich in eine Funktion ausgelagert werden. Die generateFile Funktion enthält etwas viel Code.

extracts commented 1 year ago

Ein weitere Alternative wäre es vielleicht, wenn der Autor des renanbr/bibtex-parser Pakets zukünftig ebenfalls ueberdosis/pandoc als Pandoc PHP Paket verwenden könnte. Die Verwendung von Pandoc innerhalb von renanbr/bibtex-parser ist minimal und könnte auch durch ueberdosis/pandoc bewerkstelligt werden. Ich habe dem Autor diesbezüglich eine Email geschrieben.

Wofür genau wird Pandoc bei den PDF-Deckblättern verwendet?

Pandoc wird in opus4pdf verwendet:

  1. zum Ersetzen der Platzhalter in der Markdown-Vorlage durch passende Dokument-Metadaten
  2. zum Konvertieren der in (1) generierten Markdown-Datei mittels XeTeX in eine PDF-Datei

Momentan erfordert dieser Prozess mindestens Pandoc in Version 2.11, welche in Pandoc Unterstützung für die --citeproc Option hinzufügt.

extracts commented 1 year ago

Eine Komplikation bei der Verwendung des ryakad/pandoc-php Pakets in opus4pdf ist, dass ryakad/pandoc-php (soweit ich es sehen kann) keinen direkten Input von bereits existierenden Dateien erlaubt.

extracts commented 1 year ago

Ein weitere Alternative wäre es vielleicht, wenn der Autor des renanbr/bibtex-parser Pakets zukünftig ebenfalls ueberdosis/pandoc als Pandoc PHP Paket verwenden könnte.

Einen potentiellen Lösungsansatz für das renanbr/bibtex-parser Paket habe ich hier beschrieben/umgesetzt:

https://github.com/renanbr/bibtex-parser/issues/107 https://github.com/renanbr/bibtex-parser/pull/108

extracts commented 1 year ago

Ich habe für opus4pdf im untenstehenden Branch (Commit e8e8bbb) versucht, ryakad/pandoc-php anstatt ueberdosis/pandoc zur Generierung von Markdown & PDF zu benutzen:

https://github.com/OPUS4/opus4-pdf/compare/issue63

Dabei gibt es zwei Probleme:

  1. Die Pandoc->runWith() Methode in ryakad/pandoc-php kann anscheinend nicht von Markdown zu Markdown konvertieren (was Pandoc selbst kann und was wir in opus4pdf nutzen, um die Platzhalter der Vorlage zu ersetzen)
  2. Mir ist nicht ersichtlich, wie man mit ryakad/pandoc-php mehrere Variablen (--variable=... --variable=...) übergeben kann. Dies nutzen wir in opus4pdf für die Angabe zweier Ordner (welche Bilder/Logos bzw. die Lizenzlogos enthalten)
extracts commented 1 year ago

Mit den (noch zu veröffentlichenden) Änderungen für das renanbr/bibtex-parser Paket wird ueberdosis/pandoc als Pandoc-Wrapper bevorzugt, wenn es installiert ist. Statt ryakad/pandoc-php kann damit in Zukunft auch in opus4-bibtex das ueberdosis/pandoc Paket benutzt werden. Damit funktionieren sowohl die PDF-Deckblatt-Generierung als auch der BibTeX-Import.

j3nsch commented 1 year ago

Danke, das klingt gut. Bitte die notwendigen Änderungen an den composer.json Dateien vornehmen, wenn der Release der neuen Version des Parsers stattgefunden hat.

extracts commented 1 year ago

renanbr/bibtex-parser v2.2.0 wurde heute veröffentlicht. Ich werde die Änderungen an den betroffenen composer.json Dateien vornehmen.