![hlatex 的简单颜色环境](https://linux22.com/image/372632/hlatex%20%E7%9A%84%E7%AE%80%E5%8D%95%E9%A2%9C%E8%89%B2%E7%8E%AF%E5%A2%83.png)
我有一个原本用于 PDF 输出的类,但现在也想有一个用于 HTML 的选项。我有一个非常基本的环境,其中文本块的颜色不同。例如:
\documentclass{article}
\usepackage{xcolor}
\newenvironment{specialtext}
{\begin{color}{blue}}
{\end{color}}
\begin{document}
This is normal text.
\begin{specialtext}
This is a first paragraph of special text.
This is a second paragraph of special text.
\end{specialtext}
它适用于 pdflatex,但如果我使用 htlatex 处理,则没有颜色。我花了几个小时搜索论坛,发现它\color
不适\begin{color}
用于 htlatex(出于我无法理解的原因)。不幸的是,\textcolor{blue}{TEXT}
这不是一个选项,因为输入跨越多行。
我对 htlatex 和 CSS 的了解非常有限。我尝试在 .cfg 文件中定义环境,但没有成功。我还尝试制作一个与具有环境定义的类同名的 .4ht 文件(我只是从论坛上抄袭了这个;实际上不知道我在做什么):
\ConfigureEnv{specialtext}{\NoFonts}{\EndNoFonts}{}{}
\Css{.specialtext{font-color: blue;}}
\endinput
然后这一行出现在我的 .css 文件中:
./specialtext{font-color: blue;}
但那些本应是“特殊文本”的段落却没有被标记。
我是否遗漏了一些非常明显的东西?这似乎应该很容易。
短暂性失眠!
更新:我的 tex4ht.cfg 文件很小。我只是用它来设置边距,使文本更易读。
\Preamble{html}
\begin{document}
\Css{body { max-width : 600px; }}
\Css{body { text-align : justify; }}
\Css{body { margin : auto; }}
\Css{img {max-width : 500px; height : auto;}}
\EndPreamble
“myclass.4ht” 完全由我上面输入的内容组成。我创建它只是为了尝试解决这个问题。(就像我说的,我的知识非常有限,但除了这一点之外,其他一切都或多或少是开箱即用的)。
答案1
我将您的环境移至自定义包,以便可以使用文件对其进行配置.4ht
:
\ProvidesPackage{specialtext}
\RequirePackage{xcolor}
\definecolor{specialtextcolor}{rgb}{0,0,1}
\newenvironment{specialtext}
{\par\begin{color}{specialtextcolor}}
{\end{color}}
\endinput
我做了两个更改:我定义了specialtextcolor
颜色。我们将在.4ht
文件中使用它来将有关颜色的信息传递给CSS
文件。第二个更改是显式\par
命令。我想您需要它,并且它是必要的,以避免否则会产生 HTML 标记不匹配。
配置文件specialtext.4ht
可能如下所示:
\def\get:xcolorcss#1#2{%
\expandafter\extractcolorspec\expandafter{#1}{\tsf:color}%
\expandafter\convertcolorspec\tsf:color{HTML}\tsf:color%
\edef#2{\#\tsf:color}%
}
\ConfigureEnv{specialtext}{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="specialtext">}}{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}{}{}
\AtBeginDocument{%
\get:xcolorcss{specialtextcolor}{\color:specialtext}
\Css{.specialtext{color:\color:specialtext;}}
}
这些\ifvmode\IgnorePar\fi\EndP
命令对于正确处理段落是必需的。 用于<div class="specialtext">
设置其内容的样式。
命令中的代码\AtBeginDocument
更有趣:
\AtBeginDocument{%
\get:xcolorcss{specialtextcolor}{\color:specialtext}
\Css{.specialtext{color:\color:specialtext;}}
}
该\get:xcolorcss
命令提取表单中的颜色名称或规范CSS
并将其保存在命令中以供以后使用。我们可以\Css
直接在命令中使用此命令。它生成以下代码:
.specialtext{color:#0000FF;}
必须在里面使用它\AtBeginDocument
,因为它是在xcolor.4ht
之后加载的文件中定义的specialtext.4ht
(.4ht 文件按照它们在文档中使用的顺序加载)。
这是最终的 HTML: