我需要创建一个具有灰色背景颜色的逐字环境,例如:
这需要在较旧的 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}
本文档适用于tex4ht
和pdftex
。
答案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}