\scalebox 的 \clipbox 在 xelatex 中无法正常工作

\scalebox 的 \clipbox 在 xelatex 中无法正常工作

使用 xelatex...当我将一个使用可选参数的框应用到一个时\clipbox\scalebox剪辑无法正确执行。

如果出现以下情况,问题就会消失:

  1. 使用 pdflatex,

  2. 省略了可选参数\scalebox,或者

  3. \clipbox省略了。

这是一个 2014 年尚未解答的问题,也许描述了同样的问题:带有 bidi 的剪贴框

\documentclass{article}
\usepackage{trimclip,graphicx}
\begin{document}
Works OK without scalebox opt.{} argument

\setbox0=\hbox{XXX}
  \scalebox{1}{\copy0}%
. Now clip it:
\clipbox{0pt 0pt 10pt 0pt}{%
  \scalebox{1}{\copy0}%
}.   

Breaks with scalebox opt.{} argument

\setbox0=\hbox{XXX}
  \scalebox{1}[.5]{\copy0}%
. Now clip it:
\clipbox{0pt 0pt 10pt 0pt}{%
  \scalebox{1}[.5]{\copy0}%
}.   
\end{document}

虽然我为了简单起见使用了临时包\box0,但如果使用永久包,也会出现问题\savebox。包加载顺序不起作用。

下面,上图是 pdflatex,下图是 xelatex。请注意下图的右下角,它显示了剪辑的空白结果。

在此处输入图片描述

注意:这个问题是在 Hiemanshu Sharma 询问我的方法为什么绘制不同形状的文本与 xelatex 不兼容。我将其归结为上述 MWE。

答案1

中的代码trimclip是驱动程序中现有材料的早期版本expl3。具体来说,XeTeX 驱动程序中有一些改进,但 中没有trimclip。要查看这些改进,请尝试示例

\documentclass{article}
\usepackage{expl3}
\begin{document}

A%
\ExplSyntaxOn
\hbox_set:Nn \l_tmpa_box { XXX }
\box_scale:Nnn \l_tmpa_box { 1 } { 0.5 }
\box_trim:Nnnnn \l_tmpa_box { 0pt } { 0pt } { 10pt } { 0pt }
\box_clip:N \l_tmpa_box
\box_use:N \l_tmpa_box
\ExplSyntaxOff
B

\end{document}

使用 pdfTeX 和 XeTeX。

trimclip可以通过采用较新的定义并应用它来修复中的代码:

\documentclass{article}
\usepackage{trimclip,graphicx}
\begin{document}
\makeatletter
\ifdefined\XeTeXversion
  \def\@cliptoboxdim#1{%
    \setbox #1=\hbox{%
      \Gin@defaultbp\WIDTH{\wd #1}%
      \Gin@defaultbp \DEPTH {\dp #1}%
      \@tempdima \ht #1%
      \advance\@tempdima\dp#1%
      \Gin@defaultbp \TOTALHEIGHT {\@tempdima }%
      \special{pdf:literal q}% 
      \special{pdf:literal 0 -\DEPTH \space \WIDTH \space \TOTALHEIGHT \space re W n }%
      \rlap{\copy #1}%
      \special {pdf:literal Q}%
      \hskip\wd#1%
    }%
  }
\fi
\makeatother

\setbox0=\hbox{XXX}

A%
\clipbox{0pt 0pt 10pt 0pt}{%
  \scalebox{1}[0.5]{\copy0}%
}%
B
\end{document}

相关内容