在两个 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
结果如下: