如果相应的控制序列不存在,我们如何tex4ht
跳过钩子的配置?
假设我们有一个4ht
包含配置的文件\chapter
。
\Configure{chapter}
{<beginning of chapter>} {<end of the chapter>}
{<before chapter heading>} {<after chapter heading>}
但是我们使用的4ht
文件属于文档类,例如article
,缺少\chapter
。然后我们收到以下警告:
l.10 --- TeX4ht warning --- \Configure{chapter}? ---
答案1
这是命令的默认定义\Configure
:
\def\Configure#1{%
\expandafter\ifx \csname c:#1:\endcsname\relax
\:warning{\string\Configure{#1}?}
\fi
\csname c:#1:\endcsname}
该命令由针对特定配置c:#1:
定义,并负责处理 的参数。问题是,如果未定义配置,则不会处理参数,并且它们会在文档中结束:\NewConfigure
\Configure
...
<html xmlns="http://www.w3.org/1999/xhtml"
>
<head> ¡beginning of chapter¿ ¡end of the chapter¿ ¡before chapter heading¿ ¡after
chapter heading¿ <title></title>
...
由于的参数数量\Configure
不是固定的,而是取决于的声明\NewConfigure
,因此不容易自动处理这种情况。
可能的解决方案是在配置文件中声明该配置(如果尚不存在):
\newcommand\DeclareConfigure[2]{%
\expandafter\ifx \csname c:#1:\endcsname\relax%
\NewConfigure{#1}{#2}%
\fi%
}
此命令使用技巧检查配置是否存在,如果不存在则声明配置。第一个参数是配置名称,第二个参数是参数数量。完整示例:
\newcommand\DeclareConfigure[2]{%
\expandafter\ifx \csname c:#1:\endcsname\relax%
\NewConfigure{#1}{#2}%
\fi%
}
\Preamble{xhtml}
\DeclareConfigure{chapter}{4}
\begin{document}
\Configure{chapter}
{<beginning of chapter>} {<end of the chapter>}
{<before chapter heading>} {<after chapter heading>}
\EndPreamble
\Configure{chapter}
需要四个参数,所以我们需要使用\DeclareConfigure{chapter}{4}