如何在 tikz 中绘制 ░░░░░░░░ 带有叠加文本的空白

如何在 tikz 中绘制 ░░░░░░░░ 带有叠加文本的空白

想知道如何用 tikz 绘制这种东西:

I ░░░░░░░░░░░░░░░ am a blank space.

...但文本覆盖在点网格上。另外,我希望点网格不是对角线,而是垂直/水平,并使点更小更亮,这样当文本越过它时就不会分散注意力。但它应该是这样的:

I ░Hello░World░░░ am a blank space.

但是“Hello World”的每个字母后面都会有 ░ 淡化的圆点。仅使用此 ░ unicode 字符进行演示,这将改用 tikz。

答案1

你在寻找这样的东西吗?(如果是,我要做的就是引入一个稍微灵活的模式,使得事物看起来很好,并且具有更合理的比例因子,如果不是,那么这可能会帮助其他人更好地理解这个问题。)

\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{tikz}
\usetikzlibrary{fadings,patterns}
\newcommand{\PlaceCharOverDots}[2][10]{%
\begin{tikzfadingfrompicture}[name=temp]
\node[transparent!20,scale=#1] 
{\bfseries\sffamily \textcolor{white}{#2}};
\end{tikzfadingfrompicture}%
\tikz[baseline=(X.base)]{\node[inner sep=0pt,outer sep=0pt,scale=#1] (X) {\bfseries\sffamily 
\textcolor{white}{\strut#2}};
\path[pattern=dots,overlay] (X.north west)
rectangle (X.south east);%
\path[path fading=temp,fit fading=false,overlay,pattern=dots,pattern
color=gray!20] (X.north west)
rectangle (X.south east);}%
}
\begin{document}
\PlaceCharOverDots{Hello world} 
\end{document}

在此处输入图片描述

编辑:如果您只想将文本放置在点上,只需定义一个稍微密集的点图案并将其用作节点的背景。我\tikzmarknode在这里推荐它,因为它会自动检测您所处的模式(数学模式、字体大小等),并且具有其他优势,但这并没有利用这些优势。当然,您可以inner sep根据需要进行调整和/或将其替换为inner xsepinner ysep

\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{tikz}
\usetikzlibrary{tikzmark,patterns}
% based on the rings example on p. 1060 of the pgfmanual as well as 
% https://tex.stackexchange.com/a/29367/1952 for the color
\makeatletter 
\pgfdeclarepatternformonly[/tikz/radius,\size]{flexible dots}
{\pgfpoint{-0.5*\size}{-0.5*\size}}
{\pgfpoint{0.5*\size}{0.5*\size}}
{\pgfpoint{\size}{\size}}
{
 \pgfsetfillcolor{\tikz@pattern@color}
 \pgfpathcircle\pgfpointorigin{\pgfkeysvalueof{/tikz/radius}}
 \pgfusepath{fill}
}
\makeatother
\tikzset{
radius/.initial=0.1pt,
size/.store in=\size, 
size=0.5pt,
}
\begin{document}
\tikzmarknode[pattern=flexible dots,inner sep=2pt]{test}{Hello world}
\end{document}

在此处输入图片描述

答案2

这是其中一种方法。TikZ 模式已采用自https://tex.stackexchange.com/a/323867/8650。我没有设置背景层,而是简单地绘制了两次节点。

   documentclass{article}
    \usepackage{xcolor}
    \usepackage{tikz}
    \usetikzlibrary{patterns}
    \pgfdeclarepatternformonly{my dots}{\pgfqpoint{-1pt}{-1pt}}{\pgfqpoint{5pt}{5pt}}{\pgfqpoint{2pt}{2pt}}%
    {
        \pgfpathcircle{\pgfqpoint{0pt}{0pt}}{.4pt}
        \pgfusepath{fill}
    }
    \newcommand{\fade}[1]{%
    \begin{tikzpicture}[anchor=base, baseline]
    \node[inner sep=0, outer sep=0] (node) {#1};
    \fill[pattern=my dots, pattern color=black!10] (node.south west) rectangle (node.north east);
    \node[inner sep=0, outer sep=0] (node) {#1};
    \end{tikzpicture}}
    \begin{document}
    \ \\
    I \fade{Hello World} am a blank space.\\
    I Hello World am a blank space.
    \end{document}

Hello World 背后的点图案。

相关内容