是否有“\if”命令可以确定命令是否已发出?

是否有“\if”命令可以确定命令是否已发出?

我需要重新定义命令,以便根据命令是否已发出来\chapter更改命令。是否有“if”命令可以确定命令是否已发出?\addcontentsline\appendix

答案1

一般来说,不是的,你无法\empty从无到有地判断,然而至少reportbook可以\appendix通过查看\@chapapp哪些具有定义\chaptername\appendixname依赖性来判断是否已被使用。

答案2

一般来说,唯一的办法就是自己添加。例如,具体到\appendix,你可以添加一个布尔开关,如下所示:

这是附录之前。
这是附录之后。

\documentclass{report}

\newif\ifinappendix% Default is \inappendixfalse
\let\oldappendix\appendix% Store \appendix
\renewcommand{\appendix}{% Update \appendix
  \oldappendix% Default \appendix
  \inappendixtrue% Set switch to true
}

\begin{document}

This is \ifinappendix after \else before \fi the appendix.

\appendix

This is \ifinappendix after \else before \fi the appendix.

\end{document}

etoolbox还提供类似的“布尔标志”开关:

\documentclass{report}

\usepackage{etoolbox}
\newbool{inappendix}% Default is \boolfalse{inappendix}
\appto\appendix{\booltrue{inappendix}}% Add boolean switch to \appendix

\begin{document}

This is \ifbool{inappendix}{after}{before} the appendix.

\appendix

This is \ifbool{inappendix}{after}{before} the appendix.

\end{document}

扩展大卫的回答,这再次特定于您对的参考\appendix,您可以检查的值\@chapapp

\documentclass{report}

\makeatletter
\newcommand{\inappendix}{TT\fi\expandafter\ifx\@chapapp\appendixname}
\makeatother

\begin{document}

This is \if\inappendix after \else before \fi the appendix.

\appendix

This is \if\inappendix after \else before \fi the appendix.

\end{document}

答案3

我能够直接使用命令 \ifx,但无法使用 \@chapapp 与 \chaptername 进行比较。为此,我定义了 \newcommand{\chapname}{Chapter}。具体来说,我使用了 \ifx\chaptername\chapname,效果非常好!

相关内容