在帖子中如何在單一 .css 檔案中覆蓋 tex4ht 的 CSS?建議的解決方案需要新增一個設定檔(即樣本.cfg)。所以,如果我有樣本.tex我可以添加樣本.cfg。
但是,就我而言,我使用了一個名為的附加設定文件myMedia.cfg在我的文件中添加一些附加功能。
這意味著(如果我沒猜錯的話)我應該用來--config myMedia
將此文件添加到編譯中。
make4ht --utf8 --shell-escape sample.tex --config myMedia
現在,我最終得到二設定檔:
- 一個包含所有必需命令的我的媒體
- 另一個帶有 CSS 配置的檔案(帶有 的檔案
\CssFile[] \EndCssFile
)
所以:
- 我應該添加類似
--config myMedia,sample
or的東西嗎--config "myMedia,sample"
?好吧,它不起作用......它只加載第一個配置文件 - 我應該合併嗎myMedia.cfg和樣本.cfg一起?雖然看起來很醜,但確實有效
我錯過了什麼嗎?我應該改變編譯器嗎?
答案1
我想在達裡奧斯的回答中添加一些額外的信息。
只能使用一個設定文件tex4ht
,但其內容可以被命令包含\input
,因此可以在不同項目之間重複使用部分配置。可以將特定檔案保存在本機 TEXMF 目錄中,因此可以從電腦上的任何位置存取它們。
在您的情況下,當您建立自訂套件時,您需要為該套件建立一個名為packagename.4ht
.您myMedia.4ht
在答案中提供了軟體包的設定檔。我會稍微改一下:
\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}
該\NewConfigure{myMedia}{2}
命令創建所謂的掛鉤,可以將其插入到重新定義的命令中並使用該\Configure
命令進行配置。它的作用與您的答案完全相同\NewConfigure
,但更簡單一些。
最好將\Configure
命令保留在套件設定檔之外。為什麼?在tex4ht
處理文件序言時,它會載入所有使用的套件的配置文件,以便重新定義命令並插入掛鉤。之後,執行目前輸出格式的設定檔。tex4ht
因此可以支援 HTML、ODT 和更多輸出格式。因此,HTML 的配置在html4.4ht
或文件中提供html5.4ht
,ODT 格式的配置在ooffice.4ht
等中提供tex4ht
。
如果您確定僅支援 HTML,則可以將該\Configure
命令保留在 中myMedia.4ht
,即使這不是最佳解決方案。另一種可能性是將其放入.cfg
文件中,最後一種可能性是建立自訂輸出格式。我將僅出於教育目的展示這種可能性:
輸出格式在文件中定義tex4ht.4ht
。這是格式的定義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}%
}
這裡的命令\Configure
聲明了當用作其參數的標記用作 的選項時執行的程式碼tex4ht
。html5
是自動添加的,make4ht
所以預設執行此程式碼。
可以在文件中定義自訂輸出格式tex4ht.usr
。可以將它放在本地 TEXMF 樹中,例如~/texmf/tex/latex/tex4ht/tex4ht.usr
似乎可行。其內容可能如下所示:
\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}
}
與前面的列表的區別在於,標記被命名myhtml5
並請求新文件,myconfig.4ht
.若要請求此輸出格式,請執行
make4ht filename.tex "myhtml5"
然後可以將自訂配置新增至myconfig.4ht
檔案中,該檔案可以保存在與下列位置相同的位置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
我使用了來自的包的模板tex4ht 文檔。一般來說,包的代碼需要包含在\ConfigureHinput{packagename} ... \endinput
.這確保僅在文件中使用了該套件時才執行它。否則,您會收到有關文件中缺少配置和可能不需要的 HTML 程式碼的警告。使用\Hinput
包文件中的命令註冊所使用的包以便進行處理.4ht
。
myMedia
為了正確處理段落,對配置進行了一些修改。由於此問題,原始配置產生了無效的 HTML 程式碼。如果您決定使用更簡單的解決方案,則可以將\Configure
命令複製到.cfg
檔案或複製到檔案。myMedia.4ht
這是我的回答中唯一真正必要的修復。
我想在回答中提供的最後一點資訊是,可以使用更簡單的命令來包含外部 CSS 檔案:
\Preamble{xhtml}
\begin{document}
\Configure{AddCss}{samplestyle.css}
\EndPreamble
它不會包含主 CSS 檔案的程式碼samplestyle.css
,只會包含 HTML 標頭的連結。我認為在大多數情況下這是更好的方式。
這是命令的結果
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" />
答案2
好的,我只是按照@gusbrs 在下面的評論中建議的進行操作(非常感謝!),他是對的:有不需要任何的myMedia.cfg。裡面有什麼,可以直接移進去myMedia.4ht。
該解決方案允許完全分離全域設定檔(樣本.cfg)來自其他套件檔案(例如myMedia.4ht)。
目前的在職的設定如下:
樣本.tex包含
\usepackage{myMedia}
文檔序言中的命令;\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}
- 樣本.cfg它的作用就像一個實際的配置;
\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}
- 我的媒體庫
\ProvidesPackage{myMedia} \newcommand\myMedia[1]{#1} \endinput
- 樣本樣式.css包含文檔的 CSS 樣式;
/* css.sty */ body { text-align: justify; }
命令列是
make4ht --utf8 --shell-escape sample.tex --config sample
對於那些可能需要 MWE 的人,這裡是:我的樣本