Apologies for flooding the site with tikzmark problems ... :)
I know that with \iftikzmark I can test if a given tikzmark exists in general. Is there a way to test if a particular tikzmark exists on the same page?
Use case: I'm trying to design macros that I can insert anywhere in a text that would draw a line between them –- a \linestart and a \linefinish command. However, when the \linefinish command happens to fall on a subsequent page, the line gets drawn to where the \linestart command was on the previous page. I would rather have it instead "do something else", here, just for purpose of illustration, draw me a black square – or, ideally "point across" the page in the direction to where the other mark is sitting.
In the code below, I've tried to construct what I'm envisioning using \iftikzmark but that does not work.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\newcounter{tikzmkstart}\setcounter{tikzmkstart}{0} %
\newcounter{tikzmkfinish}\setcounter{tikzmkfinish}{0} %
\newcommand{\linestart}{%
\stepcounter{tikzmkfinish}\iftikzmark{b\thetikzmkfinish}{% tikzmark exists on same page
\stepcounter{tikzmkstart}\tikzmarknode{a\thetikzmkstart}{\vphantom{x}}\addtocounter{tikzmkfinish}{-1}}
{% tikzmark doesn't exist on page
\begin{tikzpicture} \draw [line width=4] (0,0) -- (.1,0); \end{tikzpicture}\addtocounter{tikzmkfinish}{-1}}}% black square if linefinish on next page
\newcommand{\linefinish}{%
\iftikzmark{a\thetikzmkstart}{% tikzmark exists on same page
\stepcounter{tikzmkfinish}\tikzmarknode{b\thetikzmkfinish}{\vphantom{x}}\begin{tikzpicture}[remember picture] \draw[overlay] (a\thetikzmkstart.west) -- (b\thetikzmkfinish.west); \end{tikzpicture}}
{% tikzmark doesn't exist on page
\begin{tikzpicture} \draw [line width=4] (0,0) -- (.1,0); \end{tikzpicture}}}
\begin{document}
Text \linestart text text
Text text text
%\newpage
Text text \linefinish text
\end{document}
Any ideas of how else I might accomplish something like this would be very welcome!
Update: Based on @marmot's suggestion to look at this answer, I've now come up with the following. However, I'm stuck with how to make the lines "point across" the page breaks ...
\documentclass{article}
\usepackage{refcount}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcounter{tmp}
\newcommand\tikzmark[1]{%
\tikz[overlay,remember picture] \node (#1) {};}
\newcommand\linestart{%
\stepcounter{tmp}%
\tikzmark{a}\label{a\thetmp}%
\ifnum\getpagerefnumber{a\thetmp}=\getpagerefnumber{b\thetmp} \else
\begin{tikzpicture}[overlay, remember picture]
\draw [thick]
(a.west) -- (b.west);
\end{tikzpicture}%
\fi%
}
\newcommand\linefinish{%
\tikzmark{b}\label{b\thetmp}
\ifnum\getpagerefnumber{a\thetmp}=\getpagerefnumber{b\thetmp}
\begin{tikzpicture}[overlay, remember picture]
\draw [thick]
(a.west) -- (b.west);
\end{tikzpicture}%
\else
\begin{tikzpicture}[overlay, remember picture]
\draw [thick]
(a.west) -- (b.west);
\end{tikzpicture}%
\fi
}
\newcommand\Squ[1]{\linestart#1\linefinish}
\begin{document}
Text \linestart text text
Text text text
Text text \linefinish text
Text \linestart text text
Text text text
\newpage
Text text \linefinish text
\end{document}

refcount, like in Gonzalo's answer. – Apr 06 '19 at 16:56tikzmarkalready saves the page number on which it is defined (see https://tex.stackexchange.com/q/79121/86 for a use of this, and look atnext pagein the documentation). There isn't a current direct interface to that information; it is stored as\save@pg@<picture id of the tikzmark>so you could do a test on that. I'm not going to attempt to get the expansions right in a comment, but something like\ifnum\csname save@pg@\pgfpictureid\endcsname=\csname save@pg@\csname save@pt@\tmk@label\endcsname\endcsname– Andrew Stacey Apr 06 '19 at 17:10\tikzmarkor\tikzmarknodecommand from @LoopSpace's stellar library and otherwise Gonzalo's way of running the line to the bottom of the page (or whatever you have in mind). – Apr 06 '19 at 17:18tikzmarkcode. I think that https://tex.stackexchange.com/q/79121/86 might be quite close to what you're after (note that this now works with the officialtikzmarkcode). – Andrew Stacey Apr 06 '19 at 17:44