htlatex:使用 tikz 后 lstlisting 颜色停止

htlatex:使用 tikz 后 lstlisting 颜色停止

在两个 lstlisting 脚本之间构建 tikz 图形会删除图形后面脚本的所有颜色组件。我正在使用下面列出的方法(或者有更好的方法吗?)。

如果可以的话,有人知道如何保持整个文件的颜色吗?

例如,使用来自LaTeX 到 HTML 保留列表中的代码颜色 使用命令

htlatex file.tex "xhtml"

file.tex 为

\documentclass{article}
\usepackage{tikz,graphicx}
\usepackage{color}
\usepackage{listings}
\usepackage[T1]{fontenc}
\lstset{
    basicstyle=\ttfamily,
    language=[Sharp]C,
    keywordstyle=\rmfamily\bfseries,
    commentstyle=\sffamily,
}
\def\mystyle{}

\begin{document}

\Css{div.lstlisting .ectt-1000 {font-family: monospace;color:blue}}
\Css{div.lstlisting .ecss-1000 {font-family: monospace;color:green}} 
\Css{div.lstlisting .ecbx-1000 {font-family: monospace;color:red}}     

{\ttfamily hello}, {\sffamily Hello} {\bfseries Hello}  

\begin{lstlisting}
int x = 10;    
// This is a comment
string str = "hello";
\end{lstlisting}

\begin{tikzpicture}[scale=0.7,xscale=1,yscale=1]
\draw[->,thick] (-1,0)--(3.2,0) node[right]{$x$};
\draw[->, thick] (0,-1)--(0,3.2) node[above]{$y$};
\node[below left] at (0,0) {$O$};
\node[below] at (1,1) {(1;1;0)};
\node[above] at (2.5,1.8) {(2.5;1.8;0)};
\draw[->,thick] (1,1) --(2.5,1.8);
\end{tikzpicture} 

\begin{lstlisting}
int x = 10;

// This is a comment
string str = "hello";
\end{lstlisting}    

\end{document} 

导致

在此处输入图片描述

答案1

此问题是由 的 TikZ 驱动程序引起的tex4ht。它使用以下配置:

\Configure{htf} {0}{+}{<tspan font-family="}{\%s}{" font-size="\%s}{}{}{">}{</tspan>}%

这会导致以下字体更改命令生成<tspan>元素,而不是<span>,这些元素在 HTML 输出中默认使用。<tspan>元素应该只在 SVG 中使用,但此配置即使在 TikZ 图片结束后仍保持活动状态。您使用的 Css 配置取决于正确的字体类名,该类名不再生成。这只是默认驱动程序的问题之一tex4ht。您可以使用替代司机,它用于dvisvgm转换并且它不会重新定义tex4ht配置,所以它没有这样的副作用。

安装完之后可以这样使用:

\documentclass{article}
\ifdefined\HCode
  \def\pgfsysdriver{pgfsys-dvisvgm4ht.def}
 \fi
\usepackage{tikz,graphicx}
\usepackage{color}
\usepackage{listings}
\usepackage[T1]{fontenc}
\lstset{
    basicstyle=\ttfamily,
    language=[Sharp]C,
    keywordstyle=\rmfamily\bfseries,
    commentstyle=\sffamily,
}
\def\mystyle{}

\begin{document}


{\ttfamily hello}, {\sffamily Hello} {\bfseries Hello}  

\begin{lstlisting}
int x = 10;    
// This is a comment
string str = "hello";
\end{lstlisting}

\begin{tikzpicture}[scale=0.7,xscale=1,yscale=1]
\draw[->,thick] (-1,0)--(3.2,0) node[right]{$x$};
\draw[->, thick] (0,-1)--(0,3.2) node[above]{$y$};
\node[below left] at (0,0) {$O$};
\node[below] at (1,1) {(1;1;0)};
\node[above] at (2.5,1.8) {(2.5;1.8;0)};
\draw[->,thick] (1,1) --(2.5,1.8);
\end{tikzpicture} 

\begin{lstlisting}
int x = 10;

// This is a comment
string str = "hello";
\end{lstlisting}    

\end{document} 

重要的一行是

\ifdefined\HCode
  \def\pgfsysdriver{pgfsys-dvisvgm4ht.def}
 \fi

它声明了新的驱动程序。我还将命令移到\Css了配置文件中,因此 TeX 文件也myconfig.cfg可以无错误地进行编译。pdflatex

\Preamble{xhtml}
\Css{div.lstlisting .ectt-1000 {font-family: monospace;color:blue}}
\Css{div.lstlisting .ecss-1000 {font-family: monospace;color:green}} 
\Css{div.lstlisting .ecbx-1000 {font-family: monospace;color:red}}     
\begin{document}
\EndPreamble

该文档可以使用以下方式编译

make4ht -um draft -c myconfig.cfg file.tex

结果如下:

在此处输入图片描述

相关内容