在帖子中如何在单个 .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.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 文档。通常,包的代码需要包含在 中。这确保只有当包在文档中使用时才会执行它。否则,您会收到有关缺少配置的警告,并且文档中可能存在不需要的 HTML 代码。使用包文件中的命令\ConfigureHinput{packagename} ... \endinput
注册使用的包以供处理。\Hinput
.4ht
myMedia
为了正确处理段落,对的配置进行了一点修改。由于此问题,原始配置产生了无效的 HTML 代码。如果您决定使用更简单的解决方案,您可以将\Configure
命令复制到文件.cfg
或myMedia.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 的人来说,这里是:我的示例