使用 xelatex...当我将一个使用可选参数的框应用到一个时\clipbox
,\scalebox
剪辑无法正确执行。
如果出现以下情况,问题就会消失:
使用 pdflatex,
省略了可选参数
\scalebox
,或者被
\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}