如何在添加到标记列表时扩展 LaTeX 计数器

如何在添加到标记列表时扩展 LaTeX 计数器

简而言之:我试图将计数器值附加到标记列表中,但当我在最后打印标记列表时,我得到了这些计数器的最终值。我想要的是将计数器添加到列表时的值。我意识到我需要以某种方式改变事物扩展的方式(不扩展),但我真的不明白与此相关的任何问题的答案。

背景:我正在尝试解决我自己的问题,我今天早些时候发布了关于计算文档中每个章节/部分的页数。我已经很接近了,但这是我剩下的问题。

最小示例:这是我正在使用的 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}

页面

是的,它们不加起来,但是部分不会开始新的页面。

相关内容