我看到使用该类的\emph
文本输出了一些奇怪的内容。使用以下来源:htlatex
beamer
\documentclass{beamer}
\begin{document}
\begin{frame}{Test}
\emph{bold text}
\begin{itemize}
\item \emph{bold text}
\end{itemize}
\end{frame}
\end{document}
并编译
pdflatex test.tex
mk4ht htlatex test.tex 'xhtml,html5,charset=utf-8' ' -cunihtf -utf8 -cvalidate'
我看到以下 HTML 输出(已重新格式化以便于阅读,但其他方面未作修改):
<!DOCTYPE html>
<html lang="en-US" xml:lang="en-US" >
<head>
<title></title>
<meta charset="utf-8" />
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" type="text/css" href="test.css" />
<meta name="src" content="test.tex" />
</head>
<body>
<span class="cmss-12x-x-120">Test</span>
<!--l. 8--><p class="noindent" >
<span class="cmssi-10x-x-109">bold text </span>
</p>
<ul class="itemize1">
<li class="itemize">
<span class="cmssi-10x-x-109">bold</span>
<span class="cmssi-10x-x-109">text</span>
</li>
</ul>
</body>
</html>
如您所见,所有\emph
文本都包含在<span>
标签中,并且环境\emph
内的文本itemize
被分成单独的单词,每个单词都有自己的跨度。
\Configure{emph}
配置文件中的任何内容都不会影响此行为。
显然,尽管存在这种怪异现象,但输出结果看起来还是正确的。但是我的用例是从演示幻灯片生成可访问的内容版本,因此对我来说,拥有语义上合适的标签(例如<em>
)和连续的跨度很重要。
有没有简单的方法可以覆盖这种行为?
答案1
Beamer 修补了常用字体命令以支持覆盖。对于大多数命令,它使用原始命令定义,因此tex4ht
配置仍然有效。但它\emph
完全重新定义,因此配置没有任何效果。它需要再次插入beamer.4ht
:
\let\Hy@EveryPageAnchor\relax
\def\pgf@trimright@final{0pt}
\def\pgf@trimleft@final{0pt}
\let\origEndP\EndP
\AtBeginDocument{\def\EndP{\let\EndP\origEndP}\SaveEndP}
% Beamer redefines \emph, it is necessary to insert hooks again
\pend:defI\emph{\a:emph}%
\append:defI\emph{\b:emph}%
\endinput
配置可能看起来像这样(这还包含幻灯片插入的配置):
\Preamble{xhtml}
\Configure{emph}{\HCode{<em>}\NoFonts}{\EndNoFonts\HCode{</em>}}
\makeatletter
\ConfigureEnv{beamer@frameslide}
{\ifvmode\IgnorePar\fi\EndP
\HCode{<section class="slide">}\RecallEndP\par\ShowPar
}
{\ifvmode\IgnorePar\fi\EndP \HCode{</section>}}
{} {}
\makeatother
\Css{section.slide {border:solid black 0.4pt;margin-bottom:1em;}}
\begin{document}
\EndPreamble
结果如下:
<section class="slide">
<span
class="cmss-12x-x-120">Test</span>
<!--l. 8--><p class="noindent" ><em>bold text</em> </p>
<ul class="itemize1">
<li class="itemize">
<em>italic
text</em></li></ul>
</section>