具有背景颜色的 Verbatim 环境(PDFLaTeX 和 tex4ht)

具有背景颜色的 Verbatim 环境(PDFLaTeX 和 tex4ht)

我需要创建一个具有灰色背景颜色的逐字环境,例如:

彩色背景逐字环境

这需要在较旧的 TeX 安装(我相信是 2009 年的)上使用 PDFTeX 和 tex4ht。到目前为止,我的方法是

\documentclass{article}

\usepackage{framed,color,verbatim}
\definecolor{shadecolor}{rgb}{.9, .9, .9}

\newenvironment{code}%
   {\snugshade\verbatim}%
   {\endverbatim\endsnugshade}


\begin{document}
text

\begin{code}
line one
line two
\end{code}


\end{document}

当我用 运行它时,它可以正常工作pdftex main.tex。但是当我给出命令时,htlatex main xhtml,4,next我收到错误:

(/opt/texlive2011/texmf-dist/tex/generic/tex4ht/html4-math.4ht)) (./main.aux)
! You can't use `\prevdepth' in horizontal mode.
\nointerlineskip ->\prevdepth 
                              -\@m \p@ 
l.17 \end{code}

? 
! Emergency stop.
\nointerlineskip ->\prevdepth 
                              -\@m \p@ 
l.17 \end{code}

No pages of output.

我该怎么做才能获得自定义灰色背景逐字环境,就像 2009 年的 TeXlive 中的 PDFTeX 和 tex4ht 示例(称为“代码”)一样?

答案1

功劳应归于 Martin Scharrer。使用以下软件包即可实现listings

\documentclass{article}
\usepackage{listings,color}

\definecolor{verbgray}{gray}{0.9}

\lstnewenvironment{code}{%
  \lstset{backgroundcolor=\color{verbgray},
  frame=single,
  framerule=0pt,
  basicstyle=\ttfamily,
  columns=fullflexible}}{}

\definecolor{shadecolor}{rgb}{.9, .9, .9}

\begin{document}
text

\begin{code}
line one
line two
\end{code}

\end{document}

本文档适用于tex4htpdftex

答案2

另一个解决方案是使用tex4ht钩子系统。

将环境的定义放入code.sty文件中:

\ProvidesPackage{mycode.sty}
\RequirePackage{framed,color,verbatim}
\definecolor{shadecolor}{rgb}{.9, .9, .9}

\newenvironment{code}%
   {\snugshade\verbatim}%
   {\endverbatim\endsnugshade}

然后创建code.4ht仅使用以下命令调用的文件tex4ht

\renewenvironment{code}{\:tempa\verbatim}{\endverbatim\:tempb}
\ConfigureEnv{code}{\HCode{<div class="code">}}{\HCode{</div>}}{}{}
\Css{.code{
border:1px solid black;
background-color: \#999;
}}

您需要重新定义code环境,删除导致问题的代码并放置钩子\:tempa\:tempb。来自的配置\ConfigureEnv将插入此处。

答案3

另一个解决方案是检查我是否需要 PDF 或 HTML 文档。

\documentclass{article}
\usepackage{ifpdf,verbatim}

\ifpdf
\usepackage{framed,color}
\definecolor{shadecolor}{gray}{0.9}

\newenvironment{code}%
   {\snugshade\verbatim}%
   {\endverbatim\endsnugshade}

\else

\newenvironment{code}
    {\HCode{<div class='code'>}\verbatim}
    {\endverbatim\HCode{</div>}}

\fi

\begin{document}
text

\begin{code}
line one
line two
\end{code}

\end{document}

答案4

当然,你总是可以使用adjustbox来添加背景颜色。在这里你必须小心,不要采用形式,\begin{adjustbox}{..}而是\adjustbox{..}\bgroup .. \egroup采用形式。我添加了一些填充和边距。

\documentclass{article}

\usepackage{xcolor}
\usepackage{adjustbox}
\usepackage{verbatim}
\definecolor{shadecolor}{rgb}{.9, .9, .9}

\newenvironment{code}%
   {\par\noindent\adjustbox{margin=1ex,bgcolor=shadecolor,margin=0ex \medskipamount}\bgroup\varwidth\linewidth\verbatim}%
   {\endverbatim\endvarwidth\egroup}

\newenvironment{code2}%
   {\par\noindent\adjustbox{margin=1ex,bgcolor=shadecolor,margin=0ex \medskipamount}\bgroup\minipage\linewidth\verbatim}%
   {\endverbatim\endminipage\egroup}


\begin{document}
text text text text text text text text text
text text text text text text text text text

\begin{code}
line one
line two
\end{code}

text text text text text text text text text
text text text text text text text text text

\begin{code2}
line one
line two
\end{code2}


text text text text text text text text text
text text text text text text text text text

\end{document}

结果

相关内容