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}