此 MWE
\documentclass[12pt]{article}%
\usepackage{fancyhdr}
\pagestyle{fancy}
\begin{document}
\section{$\cos \left(x\right)$}
test
\end{document}
给出这个错误
make4ht foo1.tex
........
(/usr/local/texlive/2019/texmf-dist/tex/generic/tex4ht/html4-math.4ht)
(/usr/local/texlive/2019/texmf-dist/tex/generic/tex4ht/html5.4ht)) (./foo1.aux)
! Argument of \im:g has an extra }.
<inserted text>
\par
l.6 \section{$\cos \left(x\right)$}
?
注释掉\pagestyle{fancy}
错误就会消失。
此外,更有趣的是,改变\section{$\cos \left(x\right)$}
错误\section{$\cos x$}
就会消失!即
\documentclass[12pt]{article}%
\usepackage{fancyhdr}
\pagestyle{fancy}
\begin{document}
\section{$\cos x$}
test
\end{document}
没有错误。因此,看起来是使用了\left
,并且\right
是使用 text4ht 时出现问题的原因fancyhrd
我将更改我的代码以避免fancyhdr
在 tex4ht 模式下加载以绕过这个问题。
但问题是,为什么 make4ht 会这样失败? make4ht 应该更好地处理这个问题吗?
TL 2019 的最新更新截至 2 天前。
答案1
页面样式的定义如下fancy
:
\def\ps@fancy{%
\f@nch@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}% for amsbook
\f@nch@ifundefined{MakeUppercase}{\def\MakeUppercase{\uppercase}}{}%
\f@nch@ifundefined{chapter}%
{\def\sectionmark##1{\markboth{\MakeUppercase{\ifnum \c@secnumdepth>\z@
\thesection\hskip 1em\relax
\fi ##1}}{}}%
\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
\thesubsection\hskip 1em\relax \fi ##1}}}%
{\def\chaptermark##1{\markboth {\MakeUppercase{\ifnum
\c@secnumdepth>\m@ne \@chapapp\ \thechapter. \ \fi ##1}}{}}%
\def\sectionmark##1{\markright{\MakeUppercase{\ifnum \c@secnumdepth >\z@
\thesection. \ \fi ##1}}}%
}
\ps@@fancy
\gdef\ps@fancy{\@fancyplainfalse\ps@@fancy}%
\ifdim\headwidth<0sp
\global\advance\headwidth123456789sp\global\advance\headwidth\textwidth
\fi}
如您所见,它重新定义了\sectionmark
和其他部分相关命令。它似乎与 发生冲突tex4ht
。由于 提供的功能fancyhdr
对于 HTML 输出没有意义,我认为最好只是重新定义命令\ps@fancy
以不执行任何操作。唯一的缺点是,由于该\pagestyle
命令可以在文档序言中使用,因此无法使用文件合并补丁fancyhdr.4ht
。我们必须使用tex4ht
中的修补程序包机制\usepackage
。以下是完整更新的 `usepackage.4ht:
% usepackage.4ht (2019-06-24-13:58), generated from tex4ht-4ht.tex
% Copyright 2003-2009 Eitan M. Gurari
% Copyright 2009-2019 TeX Users Group
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
% http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work
% is the TeX4ht Project <http://tug.org/tex4ht>.
%
% If you modify this program, changing the
% version identification would be appreciated.
\immediate\write-1{version 2019-06-24-13:58}
\def\:temp{tex4ht}\ifx \:temp\@currname
\:warning{\string\usepackage{tex4ht} again?}
\def\:temp#1htex4ht.def,tex4ht.sty#2!*?: {\def\:temp{#2}}
\expandafter\:temp \@filelist htex4ht.def,tex4ht.sty!*?: %
\ifx \:temp\empty \else
\:warning{if
\string\RequirePackage[tex4ht]{hyperref} or
\string\usepackage[tex4ht]{hyperref} was
used try instead, repectively,
\string\RequirePackage{hyperref} or
\string\usepackage{hyperref}}
\fi
\fi
\gdef\a:usepackage{\use:package xr,xr-hyper,eso-pic,expl3,savetrees,biblatex,fancyhdr,xeCJK,polyglossia,fontspec,tikz,pdfbase,graphics,xcolor,imakeidx,minted,,!*?: }
\gdef\use:package#1,{%
\if :#1:\def\:temp##1!*?: {}\else
\def\:temp{#1}\ifx \@currname\:temp
\def\:temp##1!*?: {\input usepackage.4ht }%
\else \let\:temp=\use:package \fi
\fi \:temp}
\def\:temp{xr}\ifx \@currname\:temp
\AtEndOfPackage{\let\XR:\XR@
\def\XR@[#1]#2{%
\Configure{AtBeginDocument}{\XR:[#1]{#2}}{}}%
}
\fi
\def\:temp{xr-hyper}\ifx \@currname\:temp
\def\eat:optional[#1]{}
\AtEndOfPackage{\let\XR:\XR@
\def\XR@[#1]#2{%
\Configure{AtBeginDocument}{\XR:[#1]{#2}}{}\@ifnextchar[\eat:optional{}}%
}
\fi
\def\:temp{eso-pic}\ifx \@currname\:temp
\:dontusepackage{eso-pic}
\newcommand\AddToShipoutPicture{\@ifstar{}{}}
\let\AddToShipoutPictureBG\AddToShipoutPicture
\let\AddToShipoutPictureFG\AddToShipoutPicture
\fi
\def\:temp{expl3}\ifx \@currname\:temp
\ifdefined\XeTeXversion%
\xenunidelblock{Latin-expl3}%
\AtEndOfPackage{\xeuniuseblock{Latin-expl3}}
\fi
\fi
\def\:temp{savetrees}\ifx \@currname\:temp
\:dontusepackage{savetrees}
\fi
\def\:temp{biblatex}\ifx \@currname\:temp
\AtEndOfPackage{%
\def\blx@mknoautolang{%
\blx@lbxinput{\blx@languagename}%
{}{}%
}%
\def\blx@lbxinput@iii#1#2{%
\global\csundef{blx@lng@#2}%
\:IfFileExists{#1.lbx}
{\blx@lbxinput@iv{#2}{#1}{language '#2' -> '#1'}}
{\ifcsdef{blx@suffmaptried@#2}
{}
{\blx@warning@noline{%
File '#1.lbx' not found!\MessageBreak
Ignoring mapping '#2' -> '#1'}%
\global\cslet{blx@suffmaptried@#2}\@empty}%
\blx@lbxinput@iv{#2}{#2}{language '#2'}}}
}
\fi
\def\:temp{xeCJK}\ifx \@currname\:temp
\:dontusepackage{xeCJK}
\AtEndOfPackage{%
\RequirePackage{fontspec}
}
\DeclareDocumentCommand\setCJKmainfont{o m o}{}
\let\setCJKsansfont\setCJKmainfont
\let\setCJKmonofont\setCJKmainfont
\DeclareDocumentCommand\setCJKfamilyfont {m o m }{}
\DeclareDocumentCommand\newCJKfontfamily {o m o m}{\expandafter\gdef\csname #2\endcsname{\relax}}
\DeclareDocumentCommand\xeCJKsetup{m}{}
% }
\AtBeginDocument{%
\xeuniuseblock{CJK}
}
\fi
\AtEndOfPackage{
\let\orig@xpg@define@keys\xpg@define@keys
\def\xpg@define@keys#1{%
\orig@xpg@define@keys{#1}%
\define@choicekey+[xpg@setup]{#1}{direction}[\val\nr]{LR,RL}[LR]%
{
\togglefalse{#1@RL}%
\ifcase\nr\relax%
\csgappto{init@extras@#1}{%
a:PolyglossiaRtl%
}
\or
\csgappto{init@extras@#1}{%
\b:PolyglossiaRtl%
}
\fi
}%
{\xpg@warning{#1: Invalid value \val\space for key "direction"}}%
}}
\def\:temp{fontspec}\ifx \@currname\:temp
\ifdefined\fontspec
\:dontusepackage{fontspec}
\else
\input usepackage-fontspec.4ht
\fi
\fi
\def\:temp{tikz}\ifx \@currname\:temp
\AtEndOfPackage{%
\let\use:tikzlibrary\usetikzlibrary
\def\find:externalize#1external#2\@nil{%
\if\relax#2\relax\else
\let\tikz:externalize\tikzexternalize
\renewcommand\tikzexternalize[1][]{\tikz:externalize[##1,mode=only graphics]}
\tikzset{%
tex4ht inc/.style={%
/pgf/images/include external/.code={%
\includegraphics[]{####1.pdf}%
}%
}
}
\tikzset{tex4ht inc}
\fi
}
\renewcommand\usetikzlibrary[1]{%
\use:tikzlibrary{#1}%
\find:externalize#1external\@nil%
}
}
\fi
\def\:temp{pdfbase}\ifx\@currname\:temp
\AtEndOfPackage{%
\let\old:outputpage\@outputpage
\def\@outputpage{\old:outputpage{}}
}
\fi
\def\:temp{graphics}\ifx\@currname\:temp
\ifdefined\XeTeXversion
\PassOptionsToPackage{dvips}{graphics}
\fi
\fi
\def\:temp{xcolor}\ifx\@currname\:temp
\ifdefined\XeTeXversion
\PassOptionsToPackage{dvips}{xcolor}
\fi
\fi
\def\:temp{imakeidx}\ifx\@currname\:temp
\PassOptionsToPackage{noautomatic}{imakeidx}
\fi
\def\:temp{minted}\ifx\@currname\:temp
\AtEndOfPackage{%
\define@booleankey{minted@opt@g}{breaklines}{}{}{}%
}
\fi
\def\:temp{fancyhdr}\ifx\@currname\:temp
\AtEndOfPackage{%
\def\ps@fancy{}
}
\fi
\endinput
处理的部分fancyhdr
很小:
\def\:temp{fancyhdr}\ifx\@currname\:temp
\AtEndOfPackage{%
\def\ps@fancy{}
}
\fi
结果如下: