Vala 的回答帮助我重新表述了我的问题。请参阅下面的原文。
为了pdfsavepos
获取页面上文本的绝对位置,我在从右到左模式下使用 XeLaTeX 时遇到了以下问题。示例代码
\documentclass{article}
\usepackage[paperwidth=20000000sp,paperheight=10000000sp,
hmargin=2000000sp,vmargin=1000000sp]{geometry}
\usepackage[enable,step=1000000sp,tr]{bidipagegrid}
\usepackage{bidi}
\begin{document}
\makeatletter
\def\where#1{\pdfsavepos\write-1{XPOS(#1)=\the\pdflastxpos}%
\if@RTL\immediate\write-1{XPOS(#1) is RTL}\fi\ignorespaces}
\makeatother
\noindent \where{A1}AA\where{A2}
\begin{itemize}
\item[\where{X1}X\where{X2}]
\hspace*{0pt}\where{D1}DtoD\where{D2}{} xxx \LR{x\where{E1}EtoE\where{E2}x}
\end{itemize}
\setRL
\noindent \where{B1}BB\where{B2}{} \LR{x\where{C1}CtoC\where{C2}x}
\begin{itemize}
\item[\where{Y1}Y\where{Y2}]
\hspace*{0pt}\where{G1}GtoG\where{G2}{} xxx \LR{x\where{H1}HtoH\where{H2}x}
\end{itemize}
\end{document}
在日志文件中输出以下值:
XPOS(B1) is RTL XPOS(B2) is RTL
XPOS(Y1) is RTL XPOS(Y2) is RTL
XPOS(G1) is RTL XPOS(G2) is RTL
XPOS(A1)=2,000,000 XPOS(A2)=2,983,042
XPOS(X1)=2,819,201 XPOS(X2)=3,310,722
XPOS(D1)=3,638,402 XPOS(D2)=5,222,192
XPOS(E1)=7,042,642 XPOS(E2)=8,517,206
XPOS(B1)=2,000,000 XPOS(B2)=2,928,430
XPOS(C1)=3,492,769 XPOS(C2)=5,021,945
XPOS(Y1)=1,180,799 XPOS(Y2)=1,672,320
XPOS(G1)=2,000,000 XPOS(G2)=3,611,096
XPOS(H1)=5,431,546 XPOS(H2)=6,997,132
并生成以下页面(网格步长为 1,000,000sp):
我想知道页面上的标记位置。对于 A、X、D、E(全部为 LTR 模式)甚至 B(B 为 RTL,因此从右侧计算)来说,这似乎很容易,但我对 C(LTR 文本但从右侧测量,并且 C1 和 C2 已切换)、G(似乎已移位)和 H(均已移位和切换)有疑问。有人能帮我从pdflastposx
输出中获取绝对位置吗?
原问题,供参考。
以下代码为从右到左书写部分 (B) 提供了错误的 X 位置值。
\documentclass{article}
\usepackage{bidi}
\begin{document}
\makeatletter
\def\where#1{\pdfsavepos\write-1{XPOS(#1)=\the\pdflastxpos}%
\if@RTL\immediate\write-1{XPOS(#1) is RTL}\fi\ignorespaces}
\makeatother
\where{A0} First \where{A1} line here in RTL mode...
\setRL
\where{B0} Second \where{B1} one \LR{h\where{B2}er\where{B3}e}
\end{document}
似乎其中一些 X 值从右到左增加:日志文件获取
XPOS(B0) is RTL
XPOS(B1) is RTL
XPOS(A0)=8799518
XPOS(A1)=11380911
XPOS(B0)=8799518
XPOS(B1)=12003504
XPOS(B2)=13569089
XPOS(B3)=14117043
但我认为我们应该有 A0 < A1 < B2 < B3 < B1 < B0(如果查看 PDF)。有人能给我一些提示来获取正确的值吗?
请注意,使用旧版本的 texlive(2012-06-11 来自 debian squeeze),我得到
XPOS(B0) is RTL
XPOS(B1) is RTL
XPOS(A0)=8799518
XPOS(A1)=11380911
XPOS(B0)=8799518
XPOS(B2)=26164732
XPOS(B3)=26712686
XPOS(B1)=26712686
得到相同的 PDF 结果。
答案1
以下代码为从右到左书写部分 (B) 提供了错误的 X 位置值。
不,这并没有错。
看起来其中一些 X 值从右到左增加。
事情本该如此。
但我认为我们应该有 A0 < A1 < B2 < B3 < B1 < B0(如果查看 PDF)。
不,你错了。当你处于 LTR 模式时,参考点的 x 坐标位于 pdf 的左侧(线条开始的位置),而当你处于 RTL 模式时,参考点的 x 坐标位于 pdf 的右侧(线条开始的位置),这是完全可以接受且合乎逻辑的。
确实,您应该有 A0=B0、A1~=B1 且 A0 < A1 < B2 < B3,这就是您所拥有的。
有人能给我一些线索来获得正确的价值观吗?
它已经为您提供了正确的值。无论如何,bidi
包与此无关。这一切都发生在引擎级别。