我搜索了一下,没有找到任何相关信息。我只是发现使用 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
测试的配置:mdframed
mdframed.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}