自定义列表转换​​为 html

自定义列表转换​​为 html

我已经设法生成一个可以完美运行的 latex 文件,并且我希望在同一个文件上使用 tex4ht 实现相同的功能。

基本上,我有几个自定义\item标签,用于为项目符号图标和后面的内容提供自定义格式,无论它们位于哪个级别。如果是编号列表,则编号将取决于级别,而不是格式。以下代码检测环境是否为itemizeenumerate。然后它提供适当的格式。

\documentclass{article}
    \begin{document}
    \begin{itemize}
        \items This is items
        \itemi This is itemi
    \end{itemize}
    \begin{enumerate}
        \items This is items
        \itemi This is itemi
   \end{enumerate}
\end{document}

在我的序言中,我有以下内容:

\makeatletter
   \def\specialenvironment{itemize}
   \def\formatitems{\color{Black}\,}
   \def\items{%
       \ifx\@currenvir\specialenvironment
          \item[\normalfont{}{\color{Black}\textbullet}]
       \else 
          \expandafter\let\expandafter\originallabel\csname labelenum\romannumeral\@enumdepth\endcsname
          \expandafter\def\csname labelenum\romannumeral\@enumdepth\expandafter\endcsname\expandafter{%
          \expandafter\formatitems\originallabel}%
          \item
          \expandafter\let\csname labelenum\romannumeral\@enumdepth\endcsname\originallabel 
    \fi
\color{Black}
}
\def\formatitemi{\color{OliveGreen}\,}
\def\itemi{%
    \ifx\@currenvir\specialenvironment
        \item[\normalfont{}{\color{OliveGreen}\textit{{i}}}]
    \else 
        \expandafter\let\expandafter\originallabel\csname labelenum\romannumeral\@enumdepth\endcsname
        \expandafter\def\csname labelenum\romannumeral\@enumdepth\expandafter\endcsname\expandafter{%
        \expandafter\formatitemi\originallabel}%
        \item
        \expandafter\let\csname labelenum\romannumeral\@enumdepth\endcsname\originallabel   
    \fi
\color{OliveGreen}
}
\makeatother

这在 tex4ht 中运行没有错误,但没有提供适当的格式。我尝试在 tex4ht 配置文件中使用\ConfigureEnv\ConfigureList\NewConfigure命令,但没有成功。

有人能给我指出正确的方向吗?

答案1

在您的案例中,您想要自定义项目标签和颜色。默认情况下,tex4ht删除 itemize 和 enumerate 标签并使用CSS来显示它们,我们可以使用\ConfigureList来解决这个问题,同时使用一些CSS来隐藏浏览器添加的标签。我们还可以使用在元素上\ConfigureList添加class属性li,这样我们就可以为它们分配颜色。

首先,将宏的定义移至独立包items.sty

\ProvidesPackage{items}
\RequirePackage{xcolor}

\definecolor{Black}{rgb}{0,0,0}
\definecolor{OliveGreen}{rgb}{0.3,0.4,0.2}
   \def\specialenvironment{itemize}
   \def\formatitems{\color{Black}\,}
   \def\items{%
       \ifx\@currenvir\specialenvironment
          \item[\normalfont{}{\color{Black}\textbullet}]
       \else 
          \expandafter\let\expandafter\originallabel\csname labelenum\romannumeral\@enumdepth\endcsname
          \expandafter\def\csname labelenum\romannumeral\@enumdepth\expandafter\endcsname\expandafter{%
          \expandafter\formatitems\originallabel}%
          \item
          \expandafter\let\csname labelenum\romannumeral\@enumdepth\endcsname\originallabel 
    \fi
\color{Black}
}
\def\formatitemi{\color{OliveGreen}\,}
\def\itemi{%
    \ifx\@currenvir\specialenvironment
        \item[\normalfont{}{\color{OliveGreen}\textit{{i}}}]
    \else 
        \expandafter\let\expandafter\originallabel\csname labelenum\romannumeral\@enumdepth\endcsname
        \expandafter\def\csname labelenum\romannumeral\@enumdepth\expandafter\endcsname\expandafter{%
        \expandafter\formatitemi\originallabel}%
        \item
        \expandafter\let\csname labelenum\romannumeral\@enumdepth\endcsname\originallabel   
    \fi
\color{OliveGreen}
}
\endinput

以及的配置文件tex4htitems.4ht

\def\ItemsType{items}
\newcommand\ConfigureMyList[2]{%
\ConfigureList{#1}
   {\ifvmode\IgnorePar\fi\EndP\HCode{<#2 class="#1">\Hnewline}\ShowPar%
    \bgroup 
    \def\EndDefItem{}
   }
   {\EndDefItem\egroup%
    \ifvmode\IgnorePar\fi\EndP\HCode{</#2>\Hnewline}\ShowPar%
    \par}{\EndDefItem\HCode{<li class="\ItemsType" >}\def\EndDefItem{\HCode{</li>\Hnewline}}}{}
}


\ConfigureMyList{itemize}{ul}
\ConfigureMyList{enumerate}{ol}

\newcommand\ConfigureMyItems[2]{%
\pend:def#1{\def\ItemsType{#2}}%
}

\ConfigureMyItems\items{items}
\ConfigureMyItems\itemi{itemi}

\Css{ul, ol{list-style-type: none;}}

\newcommand\tsf@getColor[1][.]{       
  % colorname `.` holds current color 
  \extractcolorspec{#1} {\tsf@color} 
  \expandafter\convertcolorspec\tsf@color{HTML}\tsf@color
}

\newcommand\MyItemColor[2]{%
  \tsf@getColor[#2]%
  \Css{.#1{color:\#\tsf@color;}}
}

\MyItemColor{items}{Black}
\MyItemColor{itemi}{OliveGreen}

我们定义了一些命令,以简化配置。使用\ConfigureMyList,您可以配置环境#1以使用列表元素#2。默认支持的环境有:

\ConfigureMyList{itemize}{ul}
\ConfigureMyList{enumerate}{ol}

您可以添加任何其他列表环境,

我们的有趣部分\ConfigureList是:

{\EndDefItem\HCode{<li class="\ItemsType" >}\def\EndDefItem{\HCode{</li>\Hnewline}}}

ItemsType\items必须在和中定义\itemi,并且必须扩展为类名,该类名将用于分配颜色。另请注意,枚举和项目化的默认配置\DeleteMark在第三个参数的末尾使用\ConfigureList,因此删除了 LaTeX 标签,而是CSS用来生成标签。

Css 生成的标签被禁用:

\Css{ul, ol{list-style-type: none;}}

我们需要将 的定义插入\ItemsType到我们的自定义\item宏中。为了简化流程,我们可以创建一个辅助宏:

\newcommand\ConfigureMyItems[2]{%
\pend:def#1{\def\ItemsType{#2}}%
}

\ConfigureMyItems命令将在重新定义的命令的开头插入定义:

\ConfigureMyItems\items{items}
\ConfigureMyItems\itemi{itemi}

class现在可以从列表配置中访问名称。我们只需声明用于类的颜色:

\MyItemColor{items}{Black}
\MyItemColor{itemi}{OliveGreen}

结果:

在此处输入图片描述

相关内容