Htlatex 和 beamer,带有 \emph 的奇怪输出

Htlatex 和 beamer,带有 \emph 的奇怪输出

我看到使用该类的\emph文本输出了一些奇怪的内容。使用以下来源:htlatexbeamer

\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>

相关内容