为了提高某些文本的可读性,我想在字母周围添加一种“眼线”(实际上,这就是 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}