是否可以使用 tex4ht 从 latex 文件内部向 HTML 的 HEAD 部分添加条目?

是否可以使用 tex4ht 从 latex 文件内部向 HTML 的 HEAD 部分添加条目?

使用 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 部分添加条目?

参考

http://tug.org/pipermail/tex4ht/2013q2/000803.html

答案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>

相关内容