通过宏写入文件引用的绝对页码

通过宏写入文件引用的绝对页码

我想写入文件引用的绝对页码。因此我不能使用\immediate\write。现在的问题是,我认为\write当页面完成时会扩展其参数,但当然我会为该页面上的所有调用获得相同的计数器编号。我的问题是:如何将命令扩展时的计数器值传递给\write

    \documentclass{article}
    \usepackage{zref-savepos}
    \usepackage{zref-abspage}
    \usepackage{zref-user}

    \newcounter{acnt}

    \newwrite\tempfile
    \immediate\openout\tempfile=tmp.txt

    \makeatletter
    \newcommand\test{   
        \stepcounter{acnt}
        A \zsavepos{pos\arabic{acnt}}
        \write\tempfile{Nr \arabic{acnt} is on page \zref@extract{pos\arabic{acnt}}{abspage}}   
    }
    \makeatother

    \begin{document}

        \test
        \test
        \newpage
        \test
        \test
        \test

    \end{document}

输出为:

    Nr 2 is on page 0
    Nr 2 is on page 0
    Nr 5 is on page 0
    Nr 5 is on page 0
    Nr 5 is on page 0

但它应该是:

    Nr 1 is on page 1
    Nr 2 is on page 1
    Nr 3 is on page 2
    Nr 4 is on page 2
    Nr 5 is on page 2

答案1

写入的标签\zsavepos仅存储属性posxposy。因此,的值abspos未定义,并0使用默认值。这样做的原因是为了提高效率。如果标签存储每种属性(大量计数器值、部分标题等),则文件大小.aux和内存印记将非常大。因此,zref允许并希望鼓励仅使用所需属性进行标签设置。

模块zref-savepos维护一个savepos包含属性posx和 的属性列表posy。此列表可以扩展:

\zref@addprops{savepos}{abspage}% global
\zref@localaddprops{savepos}{abspage}% local

以下示例在本地扩展了列表,以避免\zsavepos在不需要的地方添加标签的属性:

\documentclass{article}
\usepackage{zref-savepos}
\usepackage{zref-abspage}
\usepackage{zref-user}

\newcounter{acnt}

\newwrite\tempfile
\immediate\openout\tempfile=tmp.txt

\makeatletter
\newcommand\test{
    \stepcounter{acnt}
    A %
    \begingroup
      \zref@localaddprops{savepos}{abspage}%
      \zsavepos{pos\arabic{acnt}}%
    \endgroup
    \immediate\write\tempfile{%
      Nr \arabic{acnt} is on page
      \zref@extract{pos\arabic{acnt}}{abspage}%
    }%
}
\makeatother

\begin{document}

    \test
    \test
    \newpage
    \test
    \test
    \test

\end{document}

结果tmp.txt

Nr 1 is on page 1
Nr 2 is on page 1
Nr 3 is on page 2
Nr 4 is on page 2
Nr 5 is on page 2

示例使用\immediate\write,因为测试文件没有显示延迟写入的原因。如果存在页码等属性,在发货时这些属性是正确的,则通常需要延迟写入。但写入命令仅写入当前计数器值和引用。

相关内容