考虑这个 MWE test2.tex
:
\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{times}
\usepackage[top=3cm,bottom=3cm,left=2cm,right=2cm,showframe]{geometry}
\usepackage{pgffor}
\usepackage[firstinits=true]{biblatex}
\bibliography{biblatex-examples}
\global\let\TocTitle\relax
\begin{document}
\global\let\TocTitle\relax
\section*{\centering Article Card}
\bigskip
\noindent The paper is:
\bigskip
\fullcite{murray}
\bigskip
\noindent The authors are:
\bigskip
\noindent%
\citeauthor{murray}
\end{document}
latex test2.tex
和都可以编译通过pdflatex test2.tex
;但是,如果htlatex test2.tex
出现以下情况则失败:
[1
! Undefined control sequence.
<write> ...dcsname{1}{x1-1000}{QQ2-1-1}{\TocTitle
}}{\folio }\relax
l.31 \end{document}
但奇怪的是,我明确地定义\TocTitle
为\relax
两次- 既在序言中,又在文档开始之后?那么如何是否可以根本变得\TocTitle
未定义????!!!发生了什么事,我该如何解决这个问题?
编辑:事实证明,通过以下更改,我可以将其成功编译成 html:
...
\usepackage[top=3cm,bottom=3cm,left=2cm,right=2cm,]{geometry} %showframe
...
\global\let\TocTitle\relax
\end{document}
...也就是说,只需添加其他\TocTitle
在结束文档之前将\def 改为\relax。
但更普遍的问题似乎是这样的:我的文档中没有\tableofcontents
,因为我不需要/不想要它出现在这个文档中;然而,即使如此,它似乎htlatex
仍然坚持为目录收集数据。所以更普遍的问题是——什么是规范的方式来告诉htlatex
不是收集或处理数据来生成目录?
答案1
这是因为您使用了\section*{\centering Article Card}
。所有章节标题都由 保存,tex4ht
而使用\centering
似乎会破坏这一点。\TocTitle
是tex4ht
包含已保存标题的内部命令,并且在每个章节命令中都重新定义它,因此如果您在其他地方声明它,它就无济于事了。
无论如何,您都不应该使用这样的格式化命令\section
,最好使用例如titlesec
包来更改部分格式:
\global\let\TocTitle\relax
\usepackage{titlesec}
\titleformat*{\section}{\bfseries\large\centering}
\begin{document}
%\global\let\TocTitle\relax
%\show\TocTitle
\section*{Article Card}
这当然不会使该部分在 html 中居中,您需要css
在文件中添加声明myconfig.cfg
:
\makeatletter
\Gm@showframefalse
\makeatother
\Preamble{xhtml}
\Css{.likesectionHead{text-align:center;}}
\begin{document}
\EndPreamble
\Gm@showframefalse
将抑制由以下项创建的页面周围的网格geometry
使用以下方式编译
htlatex filename myconfig
结果:
关于你编辑后的问题,不总是tex4ht
收集所有章节标题,即使是带星号的章节,因为你可以将 html 文件分成每个章节的多个小文件,否则你将无法打开这些文件