我想使用以下方法将纯文本文档转换为 HTML制作4小时。如果我使用此命令行,make4ht document.tex
程序将调用编译器“latex”并阻止编译。该make4ht --help
命令没有解释如何编译纯文本 tex。
将纯 tex 编译为 html 文档的具体命令行是什么?
答案1
让 TeX4ht 与 Plain TeX 一起工作并不是那么简单。Ulrike 已经指出了我的较早的答案。我们可以用它作为起点。将以下代码保存为plain-4ht.tex
:
% file plain-4ht.tex
% the following macro needs to be executed in order to include all .4ht files
\csname tex4ht\endcsname
我已将代码简化到最低限度。\csname tex4ht\endcsname
需要执行命令才能插入基本 HTML 结构。
该文件只需插入到所有宏定义之后:
\input plain-4ht
Hello world
\bye
下一个问题是如何使用 真正执行纯 TeX make4ht
。我们需要为此使用构建文件。将以下文件另存为mybuild.lua
:
Make:add("httex",
'${htlatex} --interaction=${interaction} ${latex_par}' ..
"'\\def\\Link#1.a.b.c.{\\expandafter\\def\\csname tex4ht\\endcsname{\\expandafter\\def\\csname tex4ht\\endcsname{#1,html}\\input tex4ht.sty }}" ..
"\\def\\HCode{\\futurelet\\HCode\\HChar}\\def\\HChar{\\ifx\"\\HCode\\def\\HCode\"##1\"{\\Link##1}\\expandafter\\HCode\\else\\expandafter\\Link\\fi}" ..
"\\HCode ${tex4ht_sty_par}.a.b.c.\\input \"\\detokenize{${tex_file}}\"'",
{htlatex="dviluatex"})
Make:httex {}
它使用Make:add
命令来创建Make:httex
执行 Plain TeX 的新命令。可以使用参数配置使用的引擎htlatex
(默认引擎是htlatex="dviluatex"
)
您可以使用以下方式编译该文档
make4ht -e mybuild.lua filename.tex
最后一个问题是如何配置自定义宏。TeX4ht 可以通过 patched\usepackage
命令加载特定文件的配置文件,但在 Plain 中不起作用。
假设你有一个文件mymacros.tex
:
\def\mytitle#1{\bgroup\bf #1\egroup\par}
我们想要在 HTML 文档中使用<h1>
元素。创建文件:\mytitle
mymacros.4ht
\NewConfigure{mytitle}{2}
\def\mytitle#1{\a:mytitle#1\b:mytitle\par}
\Configure{mytitle}{\ifvmode\IgnorePar\fi\EndP\HCode{<h1>}}{\HCode{</h1>}}
示例文档:
\input mymacros
\input plain-4ht
\mytitle{My title}
Some text.
\bye
该mymacros.4ht
文件可以包含在.cfg
文件中:
\Preamble{xhtml}
\catcode`\:=11
\input mymacros.4ht
\catcode`\:=12
\EndPreamble
我们需要使用正确的 catcode,因为文件:
中使用了字符.4ht
。这一切都在 LaTeX 中自动完成。
您现在可以使用以下命令编译文档:
make4ht -e mybuild.lua -c config.cfg filename.tex
结果如下:
<!DOCTYPE html>
<html lang='en-US' xml:lang='en-US'>
<head>
<title>sample.html</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' href='sample.css' type='text/css' />
<meta name='src' content='sample.tex' />
</head><body>
<h1>My title</h1>
<!-- l. 6 --><p class='indent'> Some text.
</p>
</body>
</html>