为什么在节标题中使用 $[]$ 时,titlesec 包会导致 tex4ht 出错?

为什么在节标题中使用 $[]$ 时,titlesec 包会导致 tex4ht 出错?

texlive 2014,Linux

在加载$[B]$包时,如果在部分标题中使用,则此 MWE 会失败titlesec

\documentclass[]{article}%
\usepackage{titlesec}
\begin{document}
\section{this is my $[B]$ section}
test
\end{document}

错误是

htlatex foo.tex

(/usr/local/texlive/2014/texmf-dist/tex/generic/tex4ht/html4.4ht)
(/usr/local/texlive/2014/texmf-dist/tex/generic/tex4ht/html4-math.4ht))
(./foo.aux)
! Extra }, or forgotten $.
<recently read> }

l.4 \section{this is my $[B]$ section}                                          
? 

注释titlesec包时,编译成功。此外,如果我加载包,但将标题更改为$(B)$而不是 ,$[B]$那么编译也成功。只有在使用时才[]不开心。

上述 MWE 使用 pdflatex 和 latex 编译成功。

为什么它在 tex4ht 中失败了?

 Version 3.14159265-2.6-1.40.15 (TeX Live 2014)

答案1

titlesec.4ht宏中\ttl@straight@i重新定义

\let\ttl:straight@i\ttl@straight@i
\def\ttl@straight@i#1[#2]#3{%

original\ttl@straight@i被保存下来\ttl:straight@i,并被\ttl@straight@i重新定义以执行一些额外的操作。如您所见,[]字符被用作分隔符。\ttl@straight@i然后使用以下代码调用已保存的 original

 \ttl:straight@i{#1}[#2]{#3}%

看起来这就是出错的地方。我尝试通过在参数周围添加括号来修复它:

 \ttl:straight@i{#1}[{#2}]{#3}%

并且它似乎编译时没有错误,但我不确定这是否不会破坏其他东西,所以我无法确认这个修复是否安全。

原始答案:

似乎tex4ht配置中的某些宏titlesec被用作]分隔符,因此如果该字符出现在您的章节标题中,则必须保护它。您可以做的最简单的事情就是{}在您的数学周围使用它:

\section{this is my {$[B]$} section}

相关内容