# ifx and pdflastypos

I'm not fully grasping how the \ifx command handles types.

How should the following def's read to make the \ifx statement true when pdflastypos is at the zero coordinate?

\def\nothingness{0}
\def\lastypos{\pdflastypos}

\ifx\lastypos\nothingness
TRUE \newline
\else
FALSE \newline
\fi

-

No, \ifx will be false for that definition. TeX doesn't really believe in types. \ifx just compares the token lists in the definition and the token 0 is not the same as the token \pdflastypos

\ifnum\pdflastypos=\nothingness\relax


would test to true as \ifnum expands tokens to find a <number>

-

The explicit question is already answered by David Carlisle. Thus this answer adds a more complete use case. \pdflastxpos and \pdflastypos cannot be used in a direct way. Previously \pdfsavepos must be called and the positions are availabe at shipout time. Thus the values \pdflastxpos and \pdflastypos needs to be written to a auxiliary file. Then in the next LaTeX run the stored values from the auxiliary file can be used. Package zref-savepos (of project zref) provides an interface for the \pdfsavepos feature that remembers the values in references:

\documentclass{article}
\usepackage{zref-savepos}[2010/03/26]
\begin{document}
Somewhere\zsavepos{somewhere}

\zifrefundefined{somewhere}{%
\typeout{Y-position: unknown}%
}{%
\ifnum\zposy{somewhere}=0 %
\typeout{Y-position: zero}%
\else
\typeout{Y-position: \zposy{somewhere}sp}%
\fi
}
\end{document}

-