make4ht - 提供多個設定文件

make4ht - 提供多個設定文件

在帖子中如何在單一 .css 檔案中覆蓋 tex4ht 的 CSS?建議的解決方案需要新增一個設定檔(即樣本.cfg)。所以,如果我有樣本.tex我可以添加樣本.cfg

但是,就我而言,我使用了一個名為的附加設定文件myMedia.cfg在我的文件中添加一些附加功能。

這意味著(如果我沒猜錯的話)我應該用來--config myMedia將此文件添加到編譯中。

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

現在,我最終得到設定檔:

  • 一個包含所有必需命令的我的媒體
  • 另一個帶有 CSS 配置的檔案(帶有 的檔案\CssFile[] \EndCssFile

所以:

  • 我應該添加類似--config myMedia,sampleor的東西嗎--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聲明了當用作其參數的標記用作 的選項時執行的程式碼tex4hthtml5是自動添加的,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 的人,這裡是:我的樣本

相關內容