make4ht-提供多个配置文件

make4ht-提供多个配置文件

在帖子中如何在单个 .css 文件中覆盖 tex4ht 的 CSS?提出的解决方案需要添加一个配置文件(即示例配置文件)所以,如果我有样本我可以补充一下示例配置文件

不过,在我的例子中,我使用了一个名为我的媒体配置文件为我的文档添加一些附加功能。

这意味着(如果我理解正确的话)我应该用--config myMedia这个文件添加到编译中。

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

现在,我最终配置文件:

  • 一个包含所有必需的命令闡斷娛樂
  • 另一个带有 CSS 配置的文件(带有 的文件\CssFile[] \EndCssFile

所以:

  • 我应该添加类似--config myMedia,sample或的内容吗--config "myMedia,sample"?嗯,它不起作用......它只加载第一个配置文件
  • 我应该合并吗我的媒体配置文件示例配置文件一起?它看起来真的很丑,但实际上有效

我是不是漏掉了什么?我应该更换编译器吗?

答案1

我想为 Darios 的回答添加一些额外的信息。

只能使用一个配置文件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.4hthtml5.4ht文件中提供,ODT 格式的配置在ooffice.4ht等中提供。当然,您无法将自定义配置插入这些文件,因为您的编辑将在下次更新中被删除tex4ht

如果您确定只支持 HTML,则可以保留命令\ConfiguremyMedia.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 文档。通常,包的代码需要包含在 中。这确保只有当包在文档中使用时才会执行它。否则,您会收到有关缺少配置的警告,并且文档中可能存在不需要的 HTML 代码。使用包文件中的命令\ConfigureHinput{packagename} ... \endinput注册使用的包以供处理。\Hinput.4ht

myMedia为了正确处理段落,对的配置进行了一点修改。由于此问题,原始配置产生了无效的 HTML 代码。如果您决定使用更简单的解决方案,您可以将\Configure命令复制到文件.cfgmyMedia.4ht。这是我的答案中唯一真正必要的修复。

我想在我的回答中提供的最后一点信息是,可以使用更简单的命令来包含外部 CSS 文件:

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

它不会将代码包含在samplestyle.css主 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 在下面的评论中所建议的去做了(非常感谢!),他是对的:不需要任何我的媒体配置文件那里的东西,可以搬进我的媒体.4ht

该解决方案允许完全分离全局配置文件(示例配置文件)来自其他软件包文件(例如我的媒体.4ht)。

当前在职的设置如下:

  • 样本\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}
    
  • 示例配置文件其作用类似于实际的配置文件;
    \Preamble{xhtml}
    \begin{document}
    \CssFile[samplestyle.css]
    \EndCssFile
    \EndPreamble
    
  • 我的媒体.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 的人来说,这里是:我的示例

相关内容