在此示例中,我在从右到左的上下文中在图像顶部创建了一个可点击区域,结果在 minipage 之外没有问题(可点击框出现在右侧)。但是,当在 minipage 内的图像上重复相同的代码时,左侧会出现可点击框。对此有什么解释吗?还是我遗漏了什么?
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage[bidi=basic]{babel}
\babelprovide[import, main]{arabic}
\newbox\mybox
\parindent=0pt
\begin{document}
\setbox\mybox=\vbox{\hyperlink{top}{%
\vbox to 2cm{%
\hbox to 2cm{\hfil}%
\vfil%
}%
}}%
\ht\mybox=0pt
\dp\mybox=0pt
\wd\mybox=0pt
\copy\mybox%
\includegraphics[width=.5\linewidth]{example-image}
\bigskip
\begin{minipage}{\linewidth}
\box\mybox%
\includegraphics[width=.5\linewidth]{example-image}
\end{minipage}
\newpage
\hypertarget{top}{Text text Text}
\end{document}
更新
\includegraphics[width=.5\linewidth]{example-image}
如果我们删除右侧出现的行链接框,那么在链接框后的同一行中添加任何内容时就会出现问题。
答案1
这与 hyperref 无关。没有其他可选参数的 minipage 用于\vcenter
将框居中,因此您处于数学模式。由于您使用的是低级 TeX 框,因此这会保留并影响您的框。
\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage[bidi=basic]{babel}
\babelprovide[import, main]{arabic}
\newbox\mybox
\parindent=0pt
\begin{document}
\newsavebox\myboxB
\sbox\myboxB{\mbox{.!.!.}}
% LaTeX boxes work:
\begin{minipage}{\linewidth}
\usebox\myboxB\par
xxx
\end{minipage}
\bigskip
\setbox\mybox=\vbox{\hbox{.!.!}}%
%Low-level fail
\begin{minipage}{\linewidth}
\copy\mybox%
xxx
\end{minipage}
\bigskip
% [t] alignment works:
\begin{minipage}[t]{\linewidth}
\copy\mybox%
xxx
\end{minipage}
\bigskip
% leaving vmode works:
\begin{minipage}{\linewidth}
\leavevmode\copy\mybox \par%
xxx
\end{minipage}
\bigskip
%changing mathdir works:
\mathdir TRT
\begin{minipage}[t]{\linewidth}
\copy\mybox%
xxx
\end{minipage}
\end{document}
如果您删除图形,问题就会“消失”,因为小页面的宽度不符合您的预期(同样是因为您使用了不以段落开头的低级 TeX 框)。这与 bidi 无关:
\documentclass{article}
\newbox\mybox
\parindent=0pt
\begin{document}
\setbox\mybox=\vbox{\hbox{.!.!}}%
\fbox{%
\begin{minipage}{\linewidth}
\copy\mybox
\end{minipage}}
\fbox{%
\begin{minipage}{\linewidth}
\copy\mybox x
\end{minipage}}
\fbox{%
\begin{minipage}{\linewidth}
\leavevmode\copy\mybox
\end{minipage}}
\end{document}