在 \if...\else..\fi 中使用 \localtableofcontents 时出现额外的 \fi 错误

在 \if...\else..\fi 中使用 \localtableofcontents 时出现额外的 \fi 错误

当我将\localtableofcontents(来自这些包tocloft或之一etoc)放入其中时,\if....\else..\fi我收到错误。

我之所以想要把它放在里面是if因为我希望文件能够同时用 tex4ht 和 pdflatex 进行编译,而在 tex4ht 模式下运行时我不希望出现这种情况。

\documentclass[10pt,notitlepage]{report}

\ifdefined\HCode
\else
\usepackage{tocloft}
\usepackage{etoc}
\fi

\begin{document}
\chapter{ my chapter }

\ifdefined\HCode
\else
\localtableofcontents %this gives the error
\fi

\end{document}

现在 pdflatex foo.tex 给出

>pdflatex foo.tex 
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014)
....
LaTeX2e <2014/05/01>
Babel <3.9l> and hyphenation patterns for 79 languages loaded.
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/report.cls
Document Class: report 2014/09/29 v1.4h Standard LaTeX document class
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2014/texmf-dist/tex/latex/tocloft/tocloft.sty)
(/usr/local/texlive/2014/texmf-dist/tex/latex/etoc/etoc.sty
(/usr/local/texlive/2014/texmf-dist/tex/latex/tools/multicol.sty)) (./foo.aux)
Chapter 1.
! Extra \fi.
<recently read> \fi 

l.15 \fi

\ifdefined\HCode如果我无法使用逻辑排除它,那么如何防止在 tex4ht 模式下使用 \localtableofcontents ?

>pdflatex foo.tex 
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex)

文件列表:

*File List*
  report.cls    2014/09/29 v1.4h Standard LaTeX document class
  size10.clo    2014/09/29 v1.4h Standard LaTeX file (size option)
 tocloft.sty    2013/05/02 v2.3f parameterised ToC, etc., typesetting
    etoc.sty    2014/04/22 v1.07l Completely customisable TOCs (jfB)
multicol.sty    2014/10/28 v1.8i multicolumn formatting (FMi)

答案1

我不知道为什么,但这似乎是一个扩展问题。

添加\expandafter之前\localtableofcontents解决了该问题。

梅威瑟:

\documentclass[10pt,notitlepage]{report}

\ifdefined\HCode
\else
\usepackage{tocloft}
\usepackage{etoc}
\fi

\begin{document}
\chapter{ my chapter }

\ifdefined\HCode
\else
\expandafter\localtableofcontents %no error
\fi

\end{document} 

输出(PDFLaTeX)

在此处输入图片描述

作为替代方案,正如 jfbu 所建议的,您可以加载etoolbox包并使用以下方式\ifdef代替\ifdefined

\documentclass[10pt,notitlepage]{report}

\usepackage{etoolbox}

\ifdef{\HCode}{}{%
\usepackage{tocloft}%
\usepackage{etoc}%
}

\begin{document}
\chapter{ my chapter }

\ifdef{\HCode}{}{%
\localtableofcontents%
}

\end{document} 

相关内容