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 myMedia
diese 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,sample
soll 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 \input
Befehl 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.4ht
in 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 \Configure
Befehl konfiguriert werden können. Er macht genau dasselbe wie der \NewConfigure
aus deiner Antwort, ist aber etwas einfacher.
Es ist besser, die \Configure
Befehle aus den Paketkonfigurationsdateien herauszuhalten. Warum? Wenn tex4ht
die 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. tex4ht
kann daher HTML, ODT und einige weitere Ausgabeformate unterstützen. Konfigurationen für HTML werden also in html4.4ht
oder html5.4ht
Dateien bereitgestellt, für das ODT-Format in ooffice.4ht
usw. 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 \Configure
Befehl in belassen myMedia.4ht
, auch wenn das nicht die optimale Lösung ist. Eine weitere Möglichkeit besteht darin, ihn in die .cfg
Datei 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.4ht
die 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 \Configure
Befehl hier deklariert einen Code, der ausgeführt wird, wenn die als Argument verwendete Markierung als Option für verwendet wird tex4ht
. html5
wird automatisch hinzugefügt, make4ht
sodass dieser Code standardmäßig ausgeführt wird.
Das benutzerdefinierte Ausgabeformat kann in der tex4ht.usr
Datei definiert werden. Es ist möglich, sie beispielsweise im lokalen TEXMF-Baum zu platzieren, was ~/texmf/tex/latex/tex4ht/tex4ht.usr
zu 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 myhtml5
und 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.4ht
Datei 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} ... \endinput
für die Verarbeitung registriert .\Hinput
.4ht
Die Konfiguration für myMedia
wurde 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 \Configure
Befehl in die .cfg
Datei 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.css
die 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