如何知道某一章中是否有任何章节

如何知道某一章中是否有任何章节

我想使用一个条件表达式,根据章节是否包含某些章节来修改章节标题。

例子:

\ifnum \value{chaptersections}>0
      \setchaptername1
\else
      \setchaptername2
\fi

我试图找到一些能给我提供信息的计数器(chaptersections),但没有成功。

有什么建议吗?

答案1

这是使用该软件包的快速解决方案cntperchap(我非常熟悉它的作者;-))

关键是要注册应该按章节跟踪的计数器,这里是章节计数器。

然后使用\GetStoredCounterValue[chapter number]{section}宏获取相关章节的节数。这不会打印数字本身,而是将其存储在cps@@tempstoragecounter计数器宏中……

我应该在下一个版本的cntperchap软件包中更改/记录这一点,可能就在接下来的几天内。

一些注释

  • cntperchap包需要两次 (pdf)LaTeX 运行才能存储正确的值
  • 基本上任何LaTeX计数器都可以通过这种方式进行跟踪,但是page由于运出机制,计数器有点棘手。

\documentclass{book}

\usepackage{cntperchap}

\RegisterCounters{section} % Register the counters which should be watched

\makeatletter
\newcommand{\currentchaptertitle}[1]{%
  \GetStoredCounterValue[#1]{section}
  \ifnumgreater{\value{cps@@tempcounterstorage}}{0}{%
    A chapter with \number\value{cps@@tempcounterstorage} sections
  }{%
    A chapter without any sections
  } 
}
\makeatother

\begin{document}

\chapter{\currentchaptertitle{1}}

\section{First}
\section{Second}


\chapter{\currentchaptertitle{2}}


\end{document}

在此处输入图片描述

答案2

下面的示例记住了文件中的节数.aux

  • 计数器abs@chapter用于识别章节。因此也支持带星号或不带编号的章节。
  • \section被重新定义为在文件中写入一行.aux,这会增加当前章节的节数。还\section支持带星号的命令。
  • 在下一次 LaTeX 运行中,\GetChapterSections返回当前章节的节数。\GetNextChapterSections扩展为下一章的节数。

完整示例文件:

\documentclass{report}

\usepackage{auxhook}
\AddLineBeginAux{%
  \string\providecommand\string\AuxChapterSection[1]{}%
}

\makeatletter
\newcommand*{\AuxChapterSection}[1]{%
  \@ifundefined{AuxChapterSection@#1}{%
    \expandafter\gdef\csname AuxChapterSection@#1\endcsname{1}%
  }{%
    \expandafter\xdef\csname AuxChapterSection@#1\endcsname{%
      \the\numexpr\csname AuxChapterSection@#1\endcsname + 1\relax
    }%
  }%
}
\newcommand*{\WriteAuxChapterSection}{%
  \if@filesw
    \immediate\write\@auxout{%
      \string\AuxChapterSection{\the\value{abs@chapter}}%
    }%
  \fi
}

\newcounter{abs@chapter}
\newcommand{\Original}{}
\let\OriginalChapter\chapter
\renewcommand*{\chapter}{%
  \stepcounter{abs@chapter}%
  \OriginalChapter
}
\let\OriginalSection\section
\renewcommand*{\section}{%
  \WriteAuxChapterSection
  \OriginalSection
}

\newcommand*{\@GetChapterSections}[1]{%
  \@ifundefined{AuxChapterSection@#1}{%
    0%
  }{%
    \csname AuxChapterSection@#1\endcsname
  }%
}
\newcommand*{\GetChapterSections}{%
  \expandafter\@GetChapterSections\expandafter{\the\value{abs@chapter}}%
}
\newcommand*{\GetNextChapterSections}{%
  \expandafter\@GetChapterSections\expandafter
    {\the\numexpr\value{abs@chapter}+1\relax}%
}
\makeatother

\begin{document}
\chapter*{Preface}
Sections: \GetChapterSections\\
Sections in next chapter: \GetNextChapterSections
\chapter{Introduction}
Sections: \GetChapterSections\\
Sections in next chapter: \GetNextChapterSections
\section{First section}
\section{Second section}
\chapter{Summary}
Sections: \GetChapterSections
\section*{Starred section}   
\end{document}

\end{document}

第 1 页
第2页
第 3 页

相关内容