条件 \if@mainmatter 没有任何效果

条件 \if@mainmatter 没有任何效果

我尝试制作一个具有不同行为的命令,具体取决于它是否在主要区域执行。

因此我使用\if@mainmatter主题中描述的命令检查主要内容

但是,当我在以下 MWE 中使用它时:

\documentclass{book}

\newcommand\foo{
  \makeatletter
  \if@mainmatter
  {We are on mainmatter}
  \else%
  {We are \textbf{not} on mainmatter}
  \fi%
  \makeatother
}

\begin{document}

\frontmatter

lorem ipsum dolor \foo

\mainmatter

lorem ipsum dolor \foo

\end{document}

我得到以下渲染:

lorem ipsum dolor 我们是不是关注主要内容

分页符

lorem ipsum dolor 我们是不是关注主要内容

该命令根本没有对主要物质区域和无主要物质区域做出任何区分。

那么如何使用它来根据 foo 命令是否在主区域执行来改变其行为?

答案1

你必须把\makeatletter 外部 \newcommand

\documentclass{book}

\makeatletter
\newcommand\foo{
  \if@mainmatter
  {We are on mainmatter}
  \else%
  {We are \textbf{not} on mainmatter}
  \fi%
}
\makeatother

\begin{document}

\frontmatter

lorem ipsum dolor \foo

\mainmatter

lorem ipsum dolor \foo

\end{document}

相关内容