在 \begin{figure} 之后添加 \centering 时,tex4ht 失败

在 \begin{figure} 之后添加 \centering 时,tex4ht 失败

这与加载 hyperref 包后,tex4ht 无法在标题中包含带有数学符号的图像但在新的条件下却失败了。

这是正在发生的事情的摘要。上面的链接中有一个错误,当加载图像时,tex4ht 在标题中添加数学时失败hyperref。感谢 michal.h21,这个问题现在已在最新的 TL 中修复,因为我不再使用上面的 MWE 时收到错误,这是

\documentclass{article}
\usepackage{amsmath} 
\usepackage{graphicx}
\usepackage{hyperref}

\begin{document}

\begin{figure}
\includegraphics[width=0.5\textwidth]{example-image-a}
\caption{Phase plot $y^{\prime \prime}\left(t \right)+9 y \left(t \right)-\left(\left\{\begin{array}{cc}
8 \sin \left(t \right) & 0<t <\pi  
\\
 0 & \pi <t  
\end{array}\right.\right) = 0$}
\end{figure}

\end{document}

使用命令

 make4ht -ulm default -a debug  foo.tex 'mathjax,htm'

没有错误。很好。但是一旦我添加\centering,文件的同一位置又会出现类似的错误

\documentclass{article}
\usepackage{amsmath} 
\usepackage{graphicx}
\usepackage{hyperref}

\begin{document}

\begin{figure}
\centering
\includegraphics[width=0.5\textwidth]{example-image-a}
\caption{Phase plot $y^{\prime \prime}\left(t \right)+9 y \left(t \right)-\left(\left\{\begin{array}{cc}
8 \sin \left(t \right) & 0<t <\pi  
\\
 0 & \pi <t  
\end{array}\right.\right) = 0$}
\end{figure}

\end{document}

现在同样的命令

make4ht -ulm default -a debug  foo.tex 'mathjax,htm'

给予

[INFO]    mkparams: Output dir: 
[INFO]    mkparams: Compiler: dvilualatex
[INFO]    mkparams: Latex options: -jobname='foo'  
[INFO]    mkparams: tex4ht.sty: xhtml,mathjax,htm,charset=utf-8
[INFO]    mkparams: tex4ht:  -cmozhtf -utf8
[INFO]    mkparams: build_file: foo.mk4
[INFO]    mkparams: Output format: html5
[STATUS]  make4ht: Conversion started
....
(/usr/local/texlive/2022/texmf-dist/tex/generic/tex4ht/unicode.4ht)
(/usr/local/texlive/2022/texmf-dist/tex/generic/tex4ht/html4-math.4ht)
(/usr/local/texlive/2022/texmf-dist/tex/generic/tex4ht/html5.4ht))
(/usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-dvips.def)
(./foo.aux) (/usr/local/texlive/2022/texmf-dist/tex/latex/base/ts1cmr.fd)17 nil

[1] [2]
l.10 --- TeX4ht warning --- File `"example-image-a.xbb"' not found ---
l.10 --- TeX4ht warning --- Cannot determine size of graphic in "example-image-
a.xbb" (no BoundingBox) ---
! Argument of \@caption has an extra }.
<inserted text> 
\par 
l.15 \end{array}\right.\right) = 0$}
                                  
? 

这是与上面链接的早期问题中修复的错误类似的错误,即

! Undefined control sequence.
<argument> \EndPicture 
            
l.14 \end{array}\right.\right) = 0$}

上述示例使用 lualatex 编译成功,结果为

在此处输入图片描述

\centering我在我的代码中使用了这个新问题的任何解决方法。

TL 2022 刚刚于半小时前更新。

>which make4ht
/usr/local/texlive/2022/bin/x86_64-linux/make4ht
>make4ht --version
make4ht version v0.3l
>which tex4ht
/usr/local/texlive/2022/bin/x86_64-linux/tex4ht

更新

感谢 MadyYuvi 在下面的评论,使用\caption[short caption]{long caption with the math}使 tex4ht 不会出现编译错误。这是 MWE

\documentclass{article}
\usepackage{amsmath} 
\usepackage{graphicx}
\usepackage{hyperref}

\begin{document}
\begin{figure}
\centering
\includegraphics[width=0.5\textwidth]{example-image-a}
\caption[Phase plot]{Phase plot $y^{\prime \prime}\left(t \right)+9 y \left(t \right)-\left(\left\{\begin{array}{cc}
8 \sin \left(t \right) & 0<t <\pi  
\\
 0 & \pi <t  
\end{array}\right.\right) = 0$}
\end{figure}

现在使用相同命令编译成功。不过,我认为 tex4ht 不应该像以前那样给出错误,但这暂时可以用作一种解决方法。

链接至跟踪

答案1

问题在于该\centering命令重新定义了\\,而 TeX4ht 对 Nameref 的支持(Hyperref 需要它)会失败。可以使用此配置文件修复此问题:

\Preamble{xhtml}
\catcode`\:=11
\makeatletter
\long\def\@caption#1[#2]{%
    \gdef\NR:Type{\@currenvir}%
    \begingroup%
    \let\index\:gobble%
    \let\label\:gobble%
    \let\\\relax
    \protected@xdef\NR:Title{\a:newlabel{#2}}%
    \endgroup%
   \o:NR@@caption{#1}[{#2}]%
}
\makeatother
\catcode`\:=12
\begin{document}
\EndPreamble

简而言之,我们需要\\在定义\NR:Title命令时禁用。它不会影响文档的呈现,它仅用于 Nameref 的目的。

结果如下:

在此处输入图片描述

相关内容