hlatex 的简单颜色环境

hlatex 的简单颜色环境

我有一个原本用于 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:

在此处输入图片描述

相关内容