简而言之:我试图将计数器值附加到标记列表中,但当我在最后打印标记列表时,我得到了这些计数器的最终值。我想要的是将计数器添加到列表时的值。我意识到我需要以某种方式改变事物扩展的方式(不扩展),但我真的不明白与此相关的任何问题的答案。
背景:我正在尝试解决我自己的问题,我今天早些时候发布了关于计算文档中每个章节/部分的页数。我已经很接近了,但这是我剩下的问题。
最小示例:这是我正在使用的 tex 文件的简化版本。我希望最终输出为 1,4;2,7;2,8,但我得到的却是 2,8;2,8;2,8。
\documentclass{article}
% Create the \mytoks token list, and give a way to add to it.
\newtoks\mytoks
\mytoks={}
\newcommand{\appendtomytoks}[1]{%
\mytoks=\expandafter{\the\mytoks#1}%
}
% Create the counter I'll be using.
\newcounter{mycounter}
% Now the command for storing the counter in the token list.
% (Really it's more complicated than this.)
\newcommand{\toplevelcmd}{%
\setcounter{mycounter}{\thepage}%
\addtocounter{mycounter}{3}%
\appendtomytoks{\the\value{section}, \the\value{mycounter}\par}%
}
\begin{document}
\section{First section}
% S1 P1, so should add 1,4 to token list
\toplevelcmd
\newpage{}
.
\newpage{}
.
\newpage{}
\section{Second sectionx}
% S2 P4, so should add 2,7 to token list
\toplevelcmd
\newpage{}
% S2 P5, so should add 2,8 to token list
\toplevelcmd
\the\mytoks
\end{document}
以下是我正在编写的实际文档的前言部分。\appendtopagecounttable
只是重命名了\appendtomytoks
,但正如您所见,命令有点复杂。 以下命令的参数#1
和#3
应该只是计数器值,但 #2 可能有点复杂(但我认为可能不是)。
\newcommand{\addchapterpagecount}[3]{%
\appendtopagecounttable{\medskip\par\noindent\textbf{\makebox[\parindent][l]{#1}#2\hfill #3}}
}
\newcommand{\addsectionpagecount}[3]{%
\appendtopagecounttable{\noindent\hspace{\parindent}\makebox[0.8cm][l]{#1}#2\dotfill #3}
}
答案1
如果你只想在其中输入计数器值,你可以替换
\mytoks=\expandafter{\the\mytoks#1}%
经过
\edef\tmp{\mytoks{\the\mytoks#1}}\tmp
因为它们是安全的(并且扩展\edef
)
答案2
下面说明如何使用 \csname 存储每章每节的第一页和最后一页。
\documentclass{book}
\usepackage{lipsum}
\newcounter{pages}
\newcommand{\firstpage}[1]% #1 = chapter number or some unique identifier
{\expandafter\edef\csname firstpage.#1\endcsname{\thepage}}
\newcommand{\lastpage}[1]% #1 = chapter number or some unique identifier
{\expandafter\edef\csname lastpage.#1\endcsname{\thepage}}
\newcommand{\pages}[1]% #1 = chapter number or some unique identifier
{\setcounter{pages}{\csname lastpage.#1\endcsname}%
\stepcounter{pages}%
\addtocounter{pages}{-\csname firstpage.#1\endcsname}%
\thepages}% output number of pages
\begin{document}
\chapter{One}
\firstpage{\thechapter}
\section{A}
\firstpage{\thesection}
\lipsum[1-6]
\lastpage{\thesection}
\section{B}
\firstpage{\thesection}
\lipsum[7-15]
\lastpage{\thesection}
\lastpage{\thechapter}
\newpage\noindent%
\pages{1} pages in Chapter 1\newline
\pages{1.1} pages in Section 1.1\newline
\pages{1.2} pages in Section 1.2
\end{document}
是的,它们不加起来,但是部分不会开始新的页面。