答案1
添加包“bidicontour”和“bidi”(按此顺序)并在轮廓宏中添加“bidi”前缀:
\documentclass[border=3mm]{standalone}
\usepackage{xcolor}
\usepackage{bidicontour}
\usepackage{bidi}
\bidicontourlength{1.2pt}
\pagecolor{blue!30}
\begin{document}
\bidicontour{yellow}{\Huge This is a sample text}\par
\end{document}
答案2
这不是一个解决方案,而是一个变通方法。
看起来,这样contour
做在某种程度上是 pdf 独有的,而且显然 XeTeX 不支持这一点。例如这,这,和这个。
显然,在 XeTeX 中制作轮廓的方法是使用低级 pdf 命令,就像上面链接的答案中显示的命令一样(PS:在我写这篇文章的时候,remco 证明了并非如此。无论如何......)。
我合并了其他几个问题的解决方案,并制作了一个模拟的宏\contour
:
\fillstroke{<fill color>}{<contour color>}{<stroke width>}{<text>}
其中<fill color>
和<contour color>
是有效的颜色名称,<stroke width>
是数字,不是一个维度,所以不允许单位,并且<text>
是文本(哇)。
以下是宏:
\usepackage{xcolor}
\def\rgbtoarray#1,#2,#3\null{[#1 #2 #3]}
\def\csvtoarray#1{%
\expandafter\rgbtoarray#1\null%
}
\newcommand{\extractrgb}[2]{%
\extractcolorspecs{#1}{\model}{\mycolor}%
\convertcolorspec{\model}{\mycolor}{rgb}{\printcol}%
\edef#2{\printcol}%
}
\newcommand*{\fillstroke}[4]{%
\extractrgb{#1}{\colorvector}%
\extractrgb{#2}{\strokevector}%
\special{pdf:bcolor \csvtoarray{\colorvector} \csvtoarray{\strokevector}}%
\special{pdf:literal direct #3 w 2 Tr}%
#4%
\special{pdf:ecolor}%
\special{pdf:literal direct 0 Tr}%
}
唯一需要的包是xcolor
。
这是你的 MWE:
\documentclass[border=3mm]{standalone}
\usepackage{xcolor}
\pagecolor{blue!30}
\def\rgbtoarray#1,#2,#3\null{[#1 #2 #3]}
\def\csvtoarray#1{%
\expandafter\rgbtoarray#1\null%
}
\newcommand{\extractrgb}[2]{%
\extractcolorspecs{#1}{\model}{\mycolor}%
\convertcolorspec{\model}{\mycolor}{rgb}{\printcol}%
\edef#2{\printcol}%
}
\newcommand*{\fillstroke}[4]{%
\extractrgb{#1}{\colorvector}%
\extractrgb{#2}{\strokevector}%
\special{pdf:bcolor \csvtoarray{\colorvector} \csvtoarray{\strokevector}}%
\special{pdf:literal direct #3 w 2 Tr}%
#4%
\special{pdf:ecolor}%
\special{pdf:literal direct 0 Tr}%
}
\begin{document}
\fillstroke{black}{yellow}{0.5}{\Huge This is a sample text}\par
\end{document}