如何跳过不存在的控制序列的钩子配置?

如何跳过不存在的控制序列的钩子配置?

如果相应的控制序列不存在,我们如何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}

相关内容