我没有完全理解\ifx
命令如何处理类型。
\ifx
当pdflastypos
位于零坐标时,应如何读取以下 def 才能使语句为真?
\def\nothingness{0}
\def\lastypos{\pdflastypos}
\ifx\lastypos\nothingness
TRUE \newline
\else
FALSE \newline
\fi
答案1
不,\ifx
对于该定义来说将是错误的。TeX 并不真正相信类型。\ifx
只是比较定义中的标记列表,并且标记0
与标记不同\pdflastypos
\ifnum\pdflastypos=\nothingness\relax
测试结果为 true,因为\ifnum
扩展了 token 来找到<number>
答案2
David Carlisle 已经回答了这个明确的问题。因此,这个答案增加了一个更完整的用例。\pdflastxpos
并且\pdflastypos
不能直接使用。之前\pdfsavepos
必须调用并且位置在发货时可用。因此,值\pdflastxpos
和\pdflastypos
需要写入辅助文件。然后在下一次 LaTeX 运行中,可以使用辅助文件中存储的值。包zref-savepos
(项目的)为 记住引用中的值的功能zref
提供了一个接口:\pdfsavepos
\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}