了解轮廓包的作用

了解轮廓包的作用

contour包中,宏\con@put定义为:

\newcommand*\con@put[3]{%
  \rlap{\hskip#1\raisebox{#2}[0pt]{#3}}%
}

但是如果将其改为\rlap\llap那么您就不再获得轮廓。例如,尝试

\documentclass{article}
\usepackage{contour}
\makeatletter
\renewcommand*\con@put[3]{%
  \llap{\hskip#1\raisebox{#2}[0pt]{#3}}%
}
\makeatother
\begin{document}
\colorbox{black}{This text is not visible
\contour{white}{but this is.}}
\end{document}

您将获得以下内容:

在此处输入图片描述

为什么这不起作用? 形成轮廓的特殊效果是什么? 如果决定按照上述示例\rlap进行操作,需要进行哪些更改才能仍然获得轮廓?\llap\rlap

答案1

contour多次设置文本:首先,将文本设置为指定的颜色几次,水平和垂直略微移动。然后将“内部”部分打印为黑色。结果是指定颜色的“轮廓”。更改背景颜色使其稍微可见:

\documentclass{article}
\usepackage{contour}
\begin{document}
\colorbox{red}{This text is not visible
\contour{white}{but this is.}}
\end{document}

结果

包默认contour先放16份指定颜色的副本,星型使用32份,或者可以在的可选参数中指定副本数量\contour

更改\rlap为 会使\llap第一个文本打印在左侧而不是右侧。最后一个黑色文本放在右侧,在黑色背景下不可见。再次将背景更改为红色:

\documentclass{article}
\usepackage{contour}
\makeatletter
\renewcommand*\con@put[3]{%
  \llap{\hskip#1\raisebox{#2}[0pt]{#3}}%
}
\makeatother
\begin{document}
\colorbox{red}{This text is not visible
\contour{white}{but this is.}}
\end{document}

结果 \llap


contour只是为了好玩: is 包的替代品pdfrender,它可以使用矢量字体的 PDF 特征设置轮廓:

\documentclass{article}
\usepackage{pdfrender}
\usepackage{color}
\begin{document}
\colorbox{black}{This text is not visible
\textpdfrender{
  TextRenderingMode=Stroke,
  StrokeColor=white,
  LineWidth=.25pt,
}{but this is.}}

\colorbox{red}{This text is not visible
\textpdfrender{
  TextRenderingMode=FillStroke,
  FillColor=red,
  StrokeColor=white,
  LineWidth=.25pt,
}{but this is.}}
\end{document}

结果 pdfrender

如果给出了contour选项包选项,包也可以使用此 PDF 功能。则不使用。outlines\con@put

答案2

按照 Heiko 的解释,我最后一个问题的答案是:

\documentclass{article}
\usepackage{contour}
\makeatletter
\renewcommand*\con@put[3]{%
  \llap{\raisebox{#2}[0pt]{#3}\hskip-\dimexpr\wd0+#1\relax}%
}
\makeatother
\begin{document}
\setbox0\hbox{but this is.}

\colorbox{black}{This text is not visible
\contour{white}{but this is.}}
\end{document}

相关内容