使用 mdframed 和 framed 包与 tex4ht 一起在文本周围添加框架时出错

使用 mdframed 和 framed 包与 tex4ht 一起在文本周围添加框架时出错

我搜索了一下,没有找到任何相关信息。我只是发现使用 mdframed 和 tex4ht 时会出现错误。

\documentclass{article}%
\usepackage{mdframed}
\begin{document}
\begin{mdframed}
text
\end{mdframed}
\end{document}

htlatex foo.tex

给出

(/usr/local/texlive/2013/texmf-dist/tex/latex/graphics/trig.sty)
(/usr/local/texlive/2013/texmf-dist/tex/latex/latexconfig/graphics.cfg))

! LaTeX Error: Something's wrong--perhaps a missing \item.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.6 \end{mdframed}

? 

使用 pdflatex 和 latex 编译上述内容没有问题。因此,这显然是 tex4ht 的问题。奇怪的是,它使用 编译成功latex foo.tex,但上面的错误却显示Latex Error:

这是一个已知问题吗?有人知道解决方法吗?我必须尝试找到 mdframed 的替代方案,因为我需要使用 pdflatex 和 htlatex 编译文档。我只需要在可以包含多个段落的大型文本块周围放置一个框架。我相信我会找到其他方法来实现这一点,这些方法也可以与 tex4ht 一起使用。

在 Linux 上使用 texlive 2013

更新

Text4ht 打包也失败了framed

\documentclass{article}%
\usepackage{framed}
\begin{document}
\begin{framed}
text

test
\end{framed}    
\end{document}

htlatex foo.tex

给出

(/usr/local/texlive/2013/texmf-dist/tex/generic/tex4ht/html4-math.4ht))
(./foo.aux)
! You can't use `\prevdepth' in horizontal mode.
\nointerlineskip ->\prevdepth 
                              -\@m \p@ 
l.8 \end{framed}

? 

可能无法使用 tex4ht 在文本周围添加框架。会继续尝试……

答案1

framed对和包的支持mdframed已于近期添加到,这些更改将随 TeXLive 2017 一起发布。您可以使用以下配置文件tex4ht测试的配置:mdframedmdframed.4ht

\NewConfigure{mdframed}{2}
\NewConfigure{mdframedstyle}{1}
\newcount\mdf:env:cnt
\def\mdf:id{mdframed-\the\mdf:env:cnt}
\def\mdf@trivlist#1{\global\advance\mdf:env:cnt by1\relax\a:mdframed\a:mdframedstyle}
\def\endmdf@trivlist{\b:mdframed}
 \def\mdf@lrbox#1{}
 \def\endmdf@lrbox{}

\@ifpackageloaded{xcolor}{%
\def\get:xcolorcss#1#2{%
   \expandafter\extractcolorspec\expandafter{#1}{\tsf:color}%
   \expandafter\convertcolorspec\tsf:color{HTML}\tsf:color%
   \edef#2{\#\tsf:color}%
}}{}
    \Configure{mdframed}{%
  \ifvmode\IgnorePar\fi\EndP\HCode{<div class="mdframed" id="\mdf:id">}\par
}{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}\par}

% use fallback macro when xcolor package haven't been loaded
\ifdefined\get:xcolorcss\else\def\get:xcolorcss#1#2{\def#2{#1}}\fi

\Configure{mdframedstyle}{%
  \get:xcolorcss{\mdf@backgroundcolor}\mdf:bgcolor
  \get:xcolorcss{\mdf@linecolor}\mdf:bordercolor
  \get:xcolorcss{\mdf@fontcolor}\mdf:fontcolor
  \def\mdf:border{\ifx\mdfl@linewidth\relax 1px\else\mdfl@linewidth\fi\space solid \mdf:bordercolor}
  \Css{\#\mdf:id{border:\mdf:border; background-color: \mdf:bgcolor; color:\mdf:fontcolor;}}
  \global\let\mdfl@linewidth\relax
}
\Hinput{mdframed}

此配置重新定义了一些mdframed导致问题的内部宏,并使用它们插入代码HTML。有两个配置,\Configure{mdframed}\Configure{mdframedstyle}。第一个用于HTML插入标签,第二个用于配置样式。每个mdframed环境都会生成<div>具有唯一性的元素id,因此我们可以单独设置它们的样式。

为了说明这一点,这里有一个例子:

\documentclass{article}
\usepackage{mdframed}
\usepackage{xcolor}
\begin{document}

some text
\begin{mdframed}[backgroundcolor=yellow!40,linecolor=blue,linewidth=4]
  Colorized frame
\end{mdframed}
some text between
\begin{mdframed}
  Plain frame
\end{mdframed}
another instance
\begin{mdframed}[backgroundcolor=yellow!40,linecolor=blue,linewidth=4]
  Colorized frame
\end{mdframed}
\end{document}

生成以下网页:

在此处输入图片描述

答案2

使用\fbox但将文本包含在小页面中。以下使用 tex4ht 编译 Ok 并在文本周围生成所需的框架。minipage可以根据需要调整的选项。

\documentclass{article}%    
\begin{document}

\fbox{
\begin{minipage}[t]{\textwidth}
line 1

line 2

line 3
\end{minipage}
}     
\end{document}

在此处输入图片描述

相关内容