有条件地将文本添加到目录中的章节标题前

有条件地将文本添加到目录中的章节标题前

我想根据某些条件在目录中的章节标题前添加一些文本。例如(这不起作用):

\documentclass[letterpaper,openany,oneside]{book}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tocloft}

% If the chapter is an appendix, print "Apéndice", else "Capítulo".
\makeatletter
\renewcommand\cftchappresnum{
\ifx\@chapapp\appendixname
Apéndice\
\else 
Capítulo\
\fi
 }
\makeatother

\renewcommand\cftchapaftersnumb{\newline}
\renewcommand\cftchapleader{\cftdotfill{4}}
\renewcommand\cftchappagefont{\normalfont}
\setlength{\cftchapnumwidth}{0em}

\begin{document}    
\tableofcontents
\mainmatter
\chapter{First chapter}
  \section{First section}
  \chapter{Another chapter}
  \section{this is yet another section} 
\appendix
\chapter{First Appendix}
\end{document} 

我知道这是重复的但我想知道这样的事情是否可行,因为我必须测试许多条件。即:

  • 这是目录的第一章吗?
  • 这个标题是否等于“foo”
  • ETC。

答案1

由于\@chapapp明确使用了,\cftchappresnum如果根本没有关于名称变化的信息,仅在中重新定义它是不够的,因为是在有关变化的信息已被遗忘ToC时写入的;-)\@chapapp

最好将此信息写入ToC,使用\addtocontents{toc}{\protect\renewcommand{...}}(请参阅代码中的相关行。

\appendixname与其摆弄或的明确词语,\chaptername不如让它babel关心变化,除非人们对名称有非常具体的想法,偏离babel这种语言的设置。

通过babel进行更改,代码将适用于任何定义的语言。

\documentclass[letterpaper,openany,oneside]{book}


\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}

\usepackage{tocloft}

\usepackage{xpatch}


% If the chapter is an appendix, print "Apéndice", else "Capítulo".
\makeatletter
\DeclareRobustCommand{\gettherightprefix}{
  \renewcommand{\cftchappresnum}{%
    \@chapapp~%
  }
}
\AtBeginDocument{%
  \addtocontents{toc}{\gettherightprefix}% Just use the protected version of this instead of a lot of \protect statements
}
\xpretocmd\appendix{%
  % Inform the ToC that `\@chapapp` is `\appendixname now
  \addtocontents{toc}{\protect\renewcommand{\protect\@chapapp}{\protect\appendixname}}
}{\typeout{Success}}{\typeout{Failure}}

\makeatother

\renewcommand\cftchapaftersnumb{\newline}
\renewcommand\cftchapleader{\cftdotfill{4}}
\renewcommand\cftchappagefont{\normalfont}
\setlength{\cftchapnumwidth}{0em}

\begin{document} 
\tableofcontents
\mainmatter
\chapter{First chapter}
  \section{First section}
  \chapter{Another chapter}
  \section{this is yet another section} 
\appendix
\chapter{First Appendix}
\end{document} 

在此处输入图片描述

相关内容