如果你不使用 lualatex 并且你的字体受支持(有效的解决方案)

如果你不使用 lualatex 并且你的字体受支持(有效的解决方案)

为了提高某些文本的可读性,我想在字母周围添加一种“眼线”(实际上,这就是 meme 设法在任何图片上获得可读文本的方法)。

下面是我所拥有的一个例子:

在此处输入图片描述

我想要的是:

在此处输入图片描述

如果需要,您可以使用一些 lua 代码,因为我会将它与 lualatex(和自定义字体)一起使用。

谢谢你!

梅威瑟:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikz\node[fill=red,circle]{\color{white}\textbf{Hello} world};
\end{document}

- 编辑 -

正如评论中所述,该contour软件包运行良好,但自定义字体除外。您有什么想法这个字体(编译并将lualatex字体.ttf文件放入文件夹中font/):

\documentclass{article}
% Special font
\usepackage{fontspec}
\setmainfont[Path=fonts/]{Heartbeat_in_Christmas.ttf}

\usepackage{tikz}
\usepackage[outline]{contour}
\begin{document}
\tikz\node[fill=red,circle]{\contour{black}{\protect\color{white}\textbf{Hello} world}};
\end{document}

-- 编辑 2 --

当我使用 lualatex 时我找到了解决方案:我只需要使用\usepackage{contour}而不是\usepackage[outline]{contour}

-- 编辑 3 -- 使用 pdfrender + tikz 叠加文本的解决方案也很好用,除了一些带有尖角的字符:

在此处输入图片描述

以下是原文:

    \begin{tikzpicture} \node at (0,0) {%
        \textpdfrender{
          TextRenderingMode=FillStrokeClip,
          LineWidth=.8mm,
          FillColor=white,
          StrokeColor=black,
        }{mmmnnn}%
      };
      \node at (0,0) {mmmnnn};
    \end{tikzpicture}

-- 编辑 5 -- 添加MiterLimit=1避免这些奇怪的鲨鱼边缘,现在更好了,在我的字体中,字母 m 和 n 上只有一个小洞,但这并不重要:

在此处输入图片描述

谢谢你!

答案1

在评论区大家的帮助下,我最终根据自己的需要提出了几种解决方案:

如果你不使用 lualatex 并且你的字体受支持(有效的解决方案)

只需使用\usepackage[outline]{contour}然后\contour{green}{yourtext}

如果你使用 lualatex,你可以执行以下操作(低效版本):

只需使用\usepackage{contour}然后\contour{green}{yourtext}。然而,它效率不高,因为它会创建大量的副本。 在此处输入图片描述

如果你使用 lualatex 并且想要一个细边框(有效的解决方案)

然后使用该包\usepackage{pdfrender},并按如下方式使用它:

\textpdfrender{
          TextRenderingMode=FillStrokeClip,
          LineWidth=.1pt,
          FillColor=white,
          StrokeColor=black,
          MiterLimit=1
        }{Your text}

但是,如果描边线太大,则会隐藏文本。另外,我不知道为什么,但是如果你这样做,tikz 图片将不再起作用...为什么???

在此处输入图片描述

如果您使用 lualatex,并且想要粗边框,而文本又很短(“高效”解决方案)

然后,我发现的唯一解决方案是绘制两次文本,并使用 tikzpicture 将它们放在另一次文本之上。此解决方案的问题是

\begin{tikzpicture}[anchor=base, baseline] \node at (0,0) {%
    \textpdfrender{
      TextRenderingMode=FillStrokeClip,
      LineWidth=1pt,
      FillColor=white,
      StrokeColor=black,
      MiterLimit=1
    }{Your text}%
  };
  \node at (0,0) {Your text};
\end{tikzpicture}

但是,这里并没有在段落中换行,如果你有解决办法,请告诉我。低效的解决方案 2 解决了这个问题。

在此处输入图片描述

所有解决方案都包含在一个文件中:

\documentclass{article}
% Fonts
% \usepackage{fontspec}
% \setmainfont[Path=fonts/]{Heartbeat_in_Christmas.ttf}

\usepackage{tikz}
\usetikzlibrary{positioning}
% \usepackage[outline]{contour} % Sol 1
\usepackage{pdfrender} % Sol 2 & 3
\usepackage{contour} % Sol 4
\begin{document}
% \contour{green}{\color{blue}\textbf{Hello} world, I like it.}

Solution 1: Does not work with lualatex, only pdftex.

Solution 2: Not really efficient
\contour{green}{\color{blue}Your text}

Solution 3: (thin stroke)%
\textpdfrender{
  TextRenderingMode=FillStrokeClip,
  LineWidth=.1pt,
  FillColor=blue,
  StrokeColor=green,
  MiterLimit=1
}{Your text}%
\textpdfrender{
  TextRenderingMode=FillStrokeClip,
  LineWidth=.5pt,
  FillColor=blue,
  StrokeColor=green,
  MiterLimit=1
}{Your text}

Solution 4: On single line texts (comment solution 3 to see it, no idea why...)%
\begin{tikzpicture}[anchor=base, baseline]
\node at (0,0) {\textpdfrender{
          TextRenderingMode=FillStrokeClip,
          LineWidth=1pt,
          FillColor=blue,
          StrokeColor=green,
          MiterLimit=1
        }{Your text}};
\node at (0,0) {\color{blue}Your text};
\end{tikzpicture}

\end{document}

相关内容