我正在用 LaTeX 制作一份文档,并希望在每一页添加一个横向索引,其中包含第一个单词和最后一个单词的首字母。
为此,我需要在每一页末尾重置一个命令
我在包的页脚中放了一段代码fancyhdr
:
\fancyfoot[C]{
\def\TwoFirstLettersBegin{Indef} % Resetting the command
\TwoFirstLettersBegin % Showing the new state of the command
}
但是当我建立我的文档时,发生了一些奇怪的事情:
我的命令似乎已正确重置,并且Indef
显示在页脚中时内容正确 ()。但在下一页中,当我打印命令时,似乎没有任何内容被修改。
在我的页面内容中,我经常修改其他命令,一切都很好。我不明白我做错了什么。
你知道为什么我的新命令定义在页脚中起作用而在下一页中被取消吗?
答案1
我认为使用fancyhdr
这种方法是一种滥用。该everyshi
包实际上就是为在页面发送之前执行操作而设计的。
\documentclass{article}
\usepackage{lipsum}
\usepackage{fancyhdr}
\fancyfoot[C]{\TwoFirstLettersBegin}
\usepackage{everyshi}
\EveryShipout{\gdef\TwoFirstLettersBegin{Indef}}
\def\TwoFirstLettersBegin{}
\newcommand\setfirstletters[1]{\gdef\TwoFirstLettersBegin{#1}}
\pagestyle{fancy}
\begin{document}
\setfirstletters{Indef}
\verb|\TwoFirstLettersBegin|: \TwoFirstLettersBegin
\setfirstletters{Foo}
\verb|\TwoFirstLettersBegin|: \TwoFirstLettersBegin
\setfirstletters{Bar}
\verb|\TwoFirstLettersBegin|: \TwoFirstLettersBegin
\clearpage
On the new page it's resetted -- \verb|\TwoFirstLettersBegin|: \TwoFirstLettersBegin
\end{document}