make4ht - mehrere Konfigurationsdateien bereitstellen

make4ht - mehrere Konfigurationsdateien bereitstellen

Im BeitragWie kann ich das CSS von tex4ht in einer einzelnen CSS-Datei überschreiben?Die vorgeschlagene Lösung erfordert das Hinzufügen einer Konfigurationsdatei (nämlichbeispiel.cfg). Wenn ich alsobeispiel.texIch darf hinzufügenbeispiel.cfg.

In meinem Fall verwende ich jedoch eine zusätzliche Konfigurationsdatei namensmyMedia.cfgum meinem Dokument einige zusätzliche Funktionen hinzuzufügen.

Das bedeutet (wenn ich es richtig verstanden habe), dass ich --config myMediadiese Datei zur Kompilierung hinzufügen sollte.

make4ht --utf8 --shell-escape sample.tex --config myMedia

Jetzt lande ich beizweiKonfigurationsdateien:

  • eine mit allen erforderlichen Befehlen fürmeineMedien
  • noch eine Datei mit CSS-Konfiguration (die mit \CssFile[] \EndCssFile)

Also:

  • --config myMedia,samplesoll ich etwas wie oder hinzufügen --config "myMedia,sample"? nun, es funktioniert nicht... es lädt nur die erste Konfigurationsdatei
  • soll ich zusammenführenmyMedia.cfgUndbeispiel.cfgzusammen? Es sieht zwar hässlich aus, aber es funktioniert tatsächlich

Übersehe ich etwas? Sollte ich den Compiler ändern?

Antwort1

Ich möchte der Antwort von Darios einige zusätzliche Informationen hinzufügen.

Es kann nur eine Konfigurationsdatei verwendet werden tex4ht, aber ihr Inhalt kann in den \inputBefehl einbezogen werden, sodass Teile der Konfiguration in verschiedenen Projekten wiederverwendet werden können. Es ist möglich, die einzelnen Dateien im lokalen TEXMF-Verzeichnis zu speichern, sodass sie von jedem Ort auf einem Computer aus zugänglich sind.

In Ihrem Fall müssen Sie, da Sie ein benutzerdefiniertes Paket erstellt haben, eine Konfigurationsdatei für dieses Paket mit dem Namen erstellen packagename.4ht. Sie haben myMedia.4htin Ihrer Antwort eine Konfigurationsdatei für Ihr Paket bereitgestellt. Ich würde sie ein wenig ändern:

\NewConfigure{myMedia}{2}%
\renewcommand\myMedia[1]{\a:myMedia#1\b:myMedia}
%\Configure{myMedia}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src="}\NoFonts}{\HCode{" type="video/mp4"></video></div>}\EndNoFonts}

\Hinput{myMedia}

Der \NewConfigure{myMedia}{2}Befehl erstellt sogenannte Hooks, die in die neu definierten Befehle eingefügt und mit dem \ConfigureBefehl konfiguriert werden können. Er macht genau dasselbe wie der \NewConfigureaus deiner Antwort, ist aber etwas einfacher.

Es ist besser, die \ConfigureBefehle aus den Paketkonfigurationsdateien herauszuhalten. Warum? Wenn tex4htdie Dokumentpräambel verarbeitet wird, lädt sie Konfigurationsdateien für alle verwendeten Pakete, um Befehle neu zu definieren und die Hooks einzufügen. Danach werden Konfigurationsdateien für das aktuelle Ausgabeformat ausgeführt. tex4htkann daher HTML, ODT und einige weitere Ausgabeformate unterstützen. Konfigurationen für HTML werden also in html4.4htoder html5.4htDateien bereitgestellt, für das ODT-Format in ooffice.4htusw. Es ist Ihnen natürlich nicht möglich, Ihre benutzerdefinierten Konfigurationen in diese Dateien einzufügen, da Ihre Änderungen beim nächsten Update entfernt würden tex4ht.

Wenn Sie sicher sind, dass nur HTML unterstützt wird, können Sie den \ConfigureBefehl in belassen myMedia.4ht, auch wenn das nicht die optimale Lösung ist. Eine weitere Möglichkeit besteht darin, ihn in die .cfgDatei einzufügen, und die letzte Möglichkeit besteht darin, ein benutzerdefiniertes Ausgabeformat zu erstellen. Ich werde diese Möglichkeit nur zu Bildungszwecken zeigen:

Ausgabeformate werden in der Datei definiert . Dies ist beispielsweise tex4ht.4htdie Definition für Format:html5

\Configure{html5}{%
   \:CheckOption{info}\if:Option
               \Hinclude[*]{infoht4.4ht}\fi
   \:CheckOption{info}\if:Option
               \Hinclude[*]{infomml.4ht}\fi
   \Hinclude[*]{html4.4ht}%
   \Hinclude[*]{unicode.4ht}%
   \:CheckOption{mathml}\if:Option%
   \else\:CheckOption{mathml-}\fi%
   \if:Option%
      \Hinclude[*]{mathml.4ht}%
      \Hinclude[*]{html-mml.4ht}%
   \else
      \Hinclude[*]{html4-math.4ht}%
   \fi
   \:CheckOption{svg}%
             \if:Option \else\:CheckOption{svg-}\fi
             \if:Option \else\:CheckOption{svg-obj}\fi
             \if:Option \else\:CheckOption{svg-inline}\fi
             \if:Option \Hinclude[*]{svg-option.4ht}%
                        \:CheckOption{info}\if:Option \Hinclude[*]{infosvg.4ht}\fi
             \fi
   \Hinclude[*]{html5.4ht}%
}

Der \ConfigureBefehl hier deklariert einen Code, der ausgeführt wird, wenn die als Argument verwendete Markierung als Option für verwendet wird tex4ht. html5wird automatisch hinzugefügt, make4htsodass dieser Code standardmäßig ausgeführt wird.

Das benutzerdefinierte Ausgabeformat kann in der tex4ht.usrDatei definiert werden. Es ist möglich, sie beispielsweise im lokalen TEXMF-Baum zu platzieren, was ~/texmf/tex/latex/tex4ht/tex4ht.usrzu funktionieren scheint. Der Inhalt könnte folgendermaßen aussehen:

\Configure{myhtml5}{%
   \:CheckOption{info}\if:Option
               \Hinclude[*]{infoht4.4ht}\fi
   \:CheckOption{info}\if:Option
               \Hinclude[*]{infomml.4ht}\fi
   \Hinclude[*]{html4.4ht}%
   \Hinclude[*]{unicode.4ht}%
   \:CheckOption{mathml}\if:Option%
   \else\:CheckOption{mathml-}\fi%
   \if:Option%
      \Hinclude[*]{mathml.4ht}%
      \Hinclude[*]{html-mml.4ht}%
   \else
      \Hinclude[*]{html4-math.4ht}%
   \fi
   \:CheckOption{svg}%
             \if:Option \else\:CheckOption{svg-}\fi
             \if:Option \else\:CheckOption{svg-obj}\fi
             \if:Option \else\:CheckOption{svg-inline}\fi
             \if:Option \Hinclude[*]{svg-option.4ht}%
                        \:CheckOption{info}\if:Option \Hinclude[*]{infosvg.4ht}\fi
             \fi
   \Hinclude[*]{html5.4ht}%
   \Hinclude[*]{myconfig.4ht}
}

Der Unterschied zur vorherigen Auflistung besteht darin, dass die Marke benannt myhtml5und eine neue Datei angefordert wird myconfig.4ht. Um dieses Ausgabeformat anzufordern, führen Sie aus

make4ht filename.tex "myhtml5"

Die benutzerdefinierten Konfigurationen können dann der myconfig.4htDatei hinzugefügt werden, die am selben Speicherort gespeichert werden kann wie tex4ht.usr:

\exit:ifnot{myMedia} 
\ConfigureHinput{myMedia}

\Configure{myMedia}
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src="}\NoFonts}
{\HCode{" type="video/mp4"></video></div>}\EndNoFonts}

\endinput\empty\empty\empty\empty\empty\empty 
\endinput 

Ich habe die Vorlage für ein Paket von verwendetdie tex4ht Dokumentation. Generell muss der Code für ein Paket in eingeschlossen werden . Dadurch wird sichergestellt, dass er nur ausgeführt wird, wenn das Paket im Dokument verwendet wurde. Andernfalls würden Sie Warnungen über fehlende Konfigurationen und möglicherweise unerwünschten HTML-Code in Ihrem Dokument erhalten. Die verwendeten Pakete werden mit dem Befehl in der Paketdatei \ConfigureHinput{packagename} ... \endinputfür die Verarbeitung registriert .\Hinput.4ht

Die Konfiguration für myMediawurde ein wenig geändert, um die Absätze korrekt zu verarbeiten. Die ursprüngliche Konfiguration erzeugte aufgrund dieses Problems ungültigen HTML-Code. Sie können den \ConfigureBefehl in die .cfgDatei oder in kopieren myMedia.4ht, wenn Sie sich für eine einfachere Lösung entscheiden. Dies ist die einzige wirklich notwendige Korrektur aus meiner Antwort.

Die letzte Information, die ich in meiner Antwort geben möchte, ist, dass es möglich ist, einen einfacheren Befehl zum Einbinden einer externen CSS-Datei zu verwenden:

\Preamble{xhtml}
\begin{document}
\Configure{AddCss}{samplestyle.css}
\EndPreamble

Der Code wird nicht in samplestyle.cssdie Haupt-CSS-Datei aufgenommen, sondern nur ein Link zum HTML-Header. Ich denke, das ist in den meisten Fällen die bessere Methode.

Dies ist das Ergebnis des Befehls

make4ht -um draft -c sample.cfg sample.tex "myhtml5"
 <hr class="figure" /><div class="figure" 
>                                                                                                                           
<a id="x1-21"></a>                                                     
<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src="test.mp4" type="video/mp4"></video></div>
<br /> <div class="caption" 
><span class="id">Figure 1: </span><span  
class="content">test</span></div><!--tex4ht:label?: x1-21 -->                                                   
   </div><hr class="endfigure" />

Antwort2

Ok, ich bin einfach dem gefolgt, was @gusbrs im Kommentar unten vorgeschlagen hat (vielen Dank!) und er hatte Recht: Es gibtkeine Notwendigkeitvon irgendwelchenmyMedia.cfg. Was da drin war, konnte einfach hineingeschoben werdenmyMedia.4ht.

Diese Lösung ermöglicht die vollständige Trennung der globalen Konfigurationsdatei (beispiel.cfg) aus Dateien anderer Pakete (wiemyMedia.4ht).

Die jetzigeArbeitenDas Setup ist wie folgt:

  • beispiel.texenthält den \usepackage{myMedia}Befehl in der Dokumentpräambel;

    \documentclass{article}
    \usepackage{graphicx}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc} % may use latin1 instead of utf8
    \usepackage[hidelinks]{hyperref}
    \usepackage{myMedia}
    
    \begin{document}
    
    \begin{figure}
       \centering
       \myMedia{test.mp4}
       \caption{test}
    \end{figure}
    
    \end{document}
    
  • beispiel.cfgdas wie eine echte Konfigurationsdatei wirkt;
    \Preamble{xhtml}
    \begin{document}
    \CssFile[samplestyle.css]
    \EndCssFile
    \EndPreamble
    
  • myMedia.4ht
    \NewConfigure{myMedia}[2]%
    {
        \def\a:myMedia{#1}%
        \def\b:myMedia{#2}%
    }
    \renewcommand\myMedia[1]{\a:myMedia#1\b:myMedia}
    \Configure{myMedia}{\HCode{<div class="video-content"><video width="640" height="480" playsinline autoplay muted loop><source src=}\NoFonts}{\HCode{ type="video/mp4"></video></div>}\EndNoFonts}
    
  • myMedia.sty
    \ProvidesPackage{myMedia}
    \newcommand\myMedia[1]{#1}
    \endinput
    
  • Beispielstil.cssenthält die CSS-Formatierung für das Dokument;
    /* css.sty */
    body {
        text-align: justify;
    }
    

Die Befehlszeile ist

make4ht --utf8 --shell-escape sample.tex --config sample

Für diejenigen, die möglicherweise ein MWE benötigen, hier ist es:meinBeispiel

verwandte Informationen