更改章节标题、回忆录类中的变量

更改章节标题、回忆录类中的变量

\chapter我正在尝试通过重新定义例如来更改 memoir命令\afterchaptertitle。我想开始一个新章节来更改 Latex 变量的值,以便下一章定义可以依赖于此变量。希望 MWE 能更好地澄清这一点:

\documentclass{memoir}

\newif\ifchanged
\changedfalse

\renewcommand{\afterchaptertitle}{
% The next line initially should print "false", from then on should print "true"
\small At this point, changed is \ifchanged true\else false\fi 
% Set "changed" to true, so future calls will print "true"
\changedtrue
\\ % (looks weird without a newline)
}

\begin{document}

\chapter{Test} % Prints "At this point, changed is false" as expected

Text for the first chapter. 

\chapter{Next} % Prints "At this point, changed is false" again, not as expected

Text for the second chapter

\end{document}

我原本希望第一个章节标题后面跟着“此时,更改是错误的”,第二个章节标题后面跟着“此时,更改是真实的”。但结果两者都显示为“错误”。

我觉得这与稳健性/缺失有关,\protect但这超出了我对 Latex 的理解......

答案1

而‘罪魁祸首’就是\@makechapterhead调用的命令\@chapter,它基本上是该命令的背景\chapter

memoir的版本\@makechapterhead

\def\@makechapterhead#1{%
  \chapterheadstart%  \vspace*{50\p@}%
  {%\parindent \z@ \raggedright \normalfont
   \parskip \z@
   \parindent \z@ \memRTLraggedright \normalfont
   \ifm@m@And
     \printchaptername \chapternamenum \printchapternum
     \afterchapternum % \par\nobreak \vskip 20\p@
   \else
     \printchapternonum
   \fi
   \interlinepenalty\@M
   \printchaptertitle{#1} % \Huge \bfseries #1
   \afterchaptertitle % \par\nobreak \vskip 40\p@
  }}

其中显式组在 之后开始\vspace*{50\p@}%并在 之后结束\afterchaptertitle,因此“变量”状态的任何变化\ifchanged都将是局部的,除非前面加上\global

我做了一个小版本来展示同样的问题,其中bookclass where\foo具有 的含义\chapter并且\foostuff\@makechapterhead

\documentclass{book}


\newif\ifchanged
\changedfalse


\newcommand{\afterchaptertitle}{%
Chapter \small At this point, changed is \ifchanged true\else false\fi 
\global\changedtrue%
}

\def\foostuff{%
  {%
    \afterchaptertitle%
  }%
}

\def\foo#1{%
\foostuff%

#1%
}

\begin{document}
\foo{First chapter}

\foo{Second chapter}
\end{document}

在此处输入图片描述

相关内容