如何获取 tikzmark 标记的页码?

如何获取 tikzmark 标记的页码?

给出以下使用该tikzmark库的示例:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usepackage{atbegshi}

\AtBeginShipout{\AtBeginShipoutUpperLeft{%
    \foreach \n in {A,B} {%
        \ifnum\arabic{page}=\tikzmarkpage{\n}
            \tikz[remember picture, overlay]
                \node[draw=blue] at (pic cs:\n) {\n};
        \fi
    }
}}

\newcommand\tikzmarkpage[1]{%
    % How to return the actual page number of marker #1 here?
    \arabic{page}%
}

\begin{document}
\tikzmark{A}
\newpage
\tikzmark{B}
\end{document}

在这个版本中,标记AB定义在不同的页面上,但循环遍历\AtBeginShipout钩子中的所有节点使得全部节点显示在每一页上,彼此重叠。我知道tikzmark已经存储了定义标记的页码,\foreach但我看不出有办法提取该信息以用于循环中的检查。

那么,如何定义\tikzmarkpage获取给定标记名称对应的页码?

答案1

如果您想要获得一个数字,请不要使用 \arabic,因为根据语言,这不是一个数字。

除此之外这应该可以工作(但我没有测试复杂的页码设置):

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{tikzmark}
\usepackage{atbegshi}

\AtBeginShipout{\AtBeginShipoutUpperLeft{%
    \foreach \n in {A,B} {%
        \ifnum\number\value{page}=0\tikzmarkpage{\n}
            \tikz[remember picture, overlay]
                \node[draw=blue] at (pic cs:\n) {\n};
        \fi
    }
}}



\newcommand\tikzmarkpage[1]{%
 \ifcsname save@pt@#1\endcsname
  0\csname save@pg@\csname save@pt@#1\endcsname\endcsname
 \fi}

\begin{document}


\tikzmark{A}

\newpage
\tikzmark{B}
\end{document}

相关内容