[编辑1] 原标题“无法理解为什么这个简单的宏会导致复杂的错误”
[原帖] 我写了一本书,现在正尝试使用 tex4ht 制作电子书。改编这个帖子,我引入了以下宏:
\newcommand{\gpifpdf}[2]{\ifx\HCode\UnDef{#1}\else{#2}\fi}
在生成 pdf 文件时应返回第一个参数,在使用 mk4ht 生成 html 文件时应返回第二个参数。
以下是我的名字:
\documentclass[10pt]{book}
\usepackage{hyperref}
\newcommand{\gpifpdf}[2]{\ifx\HCode\UnDef{#1}\else{#2}\fi}
\gpifpdf{
\usepackage{fontspec}
}{
\hypersetup{tex4ht}
}
\begin{document}
\gpifpdf{this is pdf text}{this is HTML text}
\end{document}
mk4ht 生成一个 html 文件,显示“这是 HTML 文本”。但是使用 Latexian 生成 pdf 会产生以下错误:
Undefined control sequence.
\clist_if_empty:NF #1->\if_meaning:w
#1\c_empty_tl \prg_return_true: \else: \prg_return_false: \fi: \c_zero {}
l.9 \begin{document}
但是,当我注释掉 时\usepackage{fontspec}
,它运行正常,生成一个显示“这是 pdf 文本”的 pdf,因此宏似乎在文档主体中正常工作。当我保留\usepackage{fontspec}
,并注释掉前一行和后三行(第 4、6、7 和 8 行)时,它也能正常生成 pdf。
换句话说:宏似乎运行正常,当我手动执行宏应该执行的操作时,一切都正常,但是当我尝试让宏执行该操作时,却不行。
我刚刚从 2013 升级到 MacTeX 2014(也就是 TeXlive 2014),问题仍然存在。我正在使用 Latexian,带有 XeTeX 选项。
答案1
语法不是
\ifx<firsttoken><secondtoken>{<true code>}\else{<false code>}\fi
正确的是
\ifx<firsttoken><secondtoken><true code>\else<false code>\fi
{#1}
因此,您可以删除和周围的括号(在充当组分隔符{#2}
的情况下)。\usepackage{fontspec}