(xe)tex:如何根据框所设置的页面(而不是读取文件的时间)将 \ifodd\pageno 逻辑 (\special) 应用于图像

(xe)tex:如何根据框所设置的页面(而不是读取文件的时间)将 \ifodd\pageno 逻辑 (\special) 应用于图像

在 (普通) XeTeX 中,如果图像出现在奇数页上,我想对图像应用某种变换 (垂直轴上的镜像)。我想要一个相当通用的解决方案,因为在某些情况下,图像可能会插入到插入中,而在其他情况下,图像只会添加到垂直列表中。

我天真地尝试了这个(图像已经读入box0,完整代码如下):

\def\beforeBox{\ifodd\pageno\kern\wd0\special{pdf: begintransform}\special{x:scale -1 1}\fi}%
\def\afterBox{\ifodd\pageno\special{pdf: endtransform}\fi}%

它立即膨胀,因此镜像当页面为奇数时(即使分页完成后,该页面仍显示在下一个页面上)。也就是说,逻辑有效,但应用得太早了。

\expandafter像这样:

\setbox0\hbox{\expandafter\beforeBox\box0\expandafter\afterBox}%

似乎没有帮助,并且基于下面完整代码中包含的额外跟踪调用,如果我将 expandafter 替换为 noexpand,那么它们绝不扩展(并不完全令人惊讶,但我认为我应该检查一下)。

有没有办法解决这个问题,而不需要将页码写入外部文件?有某种 \notimmediate 可以延迟逻辑直到页面构建完成?

显示问题的最小示例:

\def\doimage#1#2{\setbox0\hbox{\XeTeXpicfile "#2" width #1}%
  \setbox0\hbox{\beforeBox\box0\afterBox}%
  \box0
  }
\def\beforeBox{\immediate\write-1{beforeBox \the\pageno}\ifodd\pageno\kern\wd0\special{pdf: begintransform}\special{x:scale -1 1}\fi}%
\def\afterBox{\immediate\write-1{afterBox}\ifodd\pageno\special{pdf: endtransform}\fi}%
\def\junk{aut tempore sunt officia beatae libero ad non est autem unde reiciendis minima ut quasi sapiente atque non sed architecto et et culpa aliquam repellendus ipsam omnis qui sit est dolorem ab mollitia sed vero asperiores itaque quibusdam quos est repellat provident voluptatem fugit consequatur iste architecto temporibus\par}

\hsize=20em
\def\picsz{59pt}\def\filename{arrow.png}
\junk
\doimage{\picsz}{\filename}
\junk
\doimage{\picsz}{\filename}
\junk
\doimage{\picsz}{\filename}
\junk
\doimage{\picsz}{\filename}
\junk
\doimage{\picsz}{\filename}
\junk
\doimage{\picsz}{\filename}

\bye

结果截图:

截屏

答案1

感谢那些在评论中回答的人。解决方案似乎是:你无法避免使用辅助文件。

相关内容