![在 \begin{figure} 之后添加 \centering 时,tex4ht 失败](https://linux22.com/image/459237/%E5%9C%A8%20%5Cbegin%7Bfigure%7D%20%E4%B9%8B%E5%90%8E%E6%B7%BB%E5%8A%A0%20%5Ccentering%20%E6%97%B6%EF%BC%8Ctex4ht%20%E5%A4%B1%E8%B4%A5.png)
这与加载 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 的目的。
结果如下: