使用 tex4ht 编译时,我为所有 latex 源代码树使用一个全局 .cfg 文件。此文件具有所有 latex 文件通用的通用配置。
我想在每个特定 HTML 的 HEAD 部分添加特定的 META 标签。(例如描述标签,也可能是其他标签)
我无法添加<meta name="description" content="my page description">
到全局 .cfg,因为必须为每个 latex 文件在本地完成此操作。这必须转到HEAD
生成的 HTML 部分。
但我不知道如何将这样的条目插入到 HTML 的 HEAD 部分。此外,make4ht 不会接受两个 .cfg 文件,一个全局文件和一个本地文件。它只会在命令行上使用第一个文件。因此,像这样
make4ht -c global.cfg -c local.cfg foo.tex
不起作用。
因此,最好的办法是编辑每个 latex 文件本身,并在 latex 文件本身中添加这些额外的 HEAD 配置。
我知道可以使用这种方法本地修改每个文件的 .css1
\documentclass[11pt]{article}
\begin{document}
%this below will be added to the foo.css file in addition to what
%is the global .cfg file
\ifdefined\HCode
\Css{body{background-color:green;}}
\ConfigureEnv{quote}{\Tg<quote>}{\Tg</quote>}{}{}
\fi
This is a test
\end{document}
以上内容正确修改了本地 .css 文件。因此,我需要一些与上述内容类似的内容,但修改/添加到 HEAD 部分而不是 .css 文件。
当然,我仍然需要使用全局 .cfg 文件。我试过这个
\documentclass[11pt]{article}
\begin{document}
\ifdefined\HCode
\Configure{@HEAD}{\HCode{<meta name="description" content="description"/>\Hnewline}}
\ConfigureEnv{quote}{\Tg<quote>}{\Tg</quote>}{}{}
\fi
This is a test
\end{document}
然后,make4ht -c ~/my_global.cfg foo.tex
但生成的代码中foo.html
没有该行meta name="description"
。所以我使用的语法是错误的,在过去的一个小时里尝试了很多其他方法,但都不起作用。我也试过了\ConfigureEnv{@HEAD}....
是否可以使用 tex4ht 从 latex 文件内部向 HTML 的 HEAD 部分添加条目?
参考
答案1
基本 HTML 结构插入在 处\begin{document}
,因此在文档正文中进行配置时@HEAD
,它不会产生任何效果。事实上,大部分操作都tex4ht
在 处执行\begin{document}
,包括对 LaTeX 包的重新定义。
因此,必须将配置放在文档前言中,并在执行时执行\begin{document}
。这可以使用以下命令实现\AtBeginDocument
:
\documentclass[11pt]{article}
\ifdefined\HCode
\AtBeginDocument{%
\Configure{@HEAD}{\HCode{<meta name="description" content="description"/>\Hnewline}}
\ConfigureEnv{quote}{\Tg<quote>}{\Tg</quote>}{}{}
}
\fi
\begin{document}
This is a test
\end{document}
结果:
<!DOCTYPE html>
<html lang="en-US" xml:lang="en-US" >
<head><title></title>
<meta charset="utf-8" />
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" type="text/css" href="sample.css" />
<meta name="src" content="sample.tex" />
<meta name="description" content="description"/>
</head><body
>
<!--l. 11--><p class="noindent" >This is a test </p>
</body>
</html>
你\AtBeginDocument
也可以将这个技巧用于你的通用代码。只需将全局配置文件中的配置保存到一个myconfig.sty
文件中:
\AtBeginDocument{%
\Configure{@HEAD}{\HCode{<meta name="test" content="test"/>\Hnewline}}
\ConfigureEnv{quote}{\Tg<quote>}{\Tg</quote>}{}{}
}
\endinput
并从本地配置文件中需要它:
\Preamble{xhtml}
\RequirePackage{myconfig}
\Configure{@HEAD}{\HCode{<meta name="description" content="description"/>\Hnewline}}
\begin{document}
\EndPreamble
结果:
<!DOCTYPE html>
<html lang="en-US" xml:lang="en-US" >
<head> <title></title>
<meta charset="utf-8" />
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" type="text/css" href="sample.css" />
<meta name="src" content="sample.tex" />
<meta name="description" content="description"/>
<meta name="test" content="test"/>
</head><body
>
<!--l. 9--><p class="noindent" >This is a test </p>
</body>
</html>