第一次尝试

第一次尝试

有没有办法用图像的随机部分填充 Tikz 节点的文本?

如果图像的每个部分在填充文本节点之前也可以随机旋转,那就太好了。

我并不真正关心如何设置图像每个部分的大小(只要图像的大小与要填充的相应文本的大小相比足够大)。因此,例如:

  • 各部分的尺寸可以是恒定的并由用户给定,例如\def\sizeParts{100pt},表示 100ptx100pt 图像部分。
  • 或者,可以根据要填充的相应文本的大小自动计算图像的大小。

所讨论的文本实际上是一个符号列表,比如说:{$\blacksquare$,--,B,$\blacksquare$}

列表中的每个符号都以水平方式(即内联)打印,每个符号都有一个节点(从Sandy G' 在这里回答):

\newcommand{\hsp}{.7}
\foreach \s[count=\n from 0] in {$\blacksquare$,--,B,$\blacksquare$}{%
  \node[font=\bfseries\Huge] (txt) at (\hsp*\n,0){\s};%
}%

在末尾查看预期结果第一次尝试下面的部分有一个说明性的例子。

其他最终用途详细信息(以防万一)

此外,如果解决方案能够与上面所示的节点定义兼容,并使用\foreach逗号分隔的符号列表进行循环,那就太好了,因为我想用pic它来定义一个 Tikz,以便执行 Tikz 装饰(以便轻松地沿路径重复图案,从这里):

\usetikzlibrary{decorations.markings}
\tikzset{symbols/.pic={%
    \foreach \s[count=\n from 0] in {$\blacksquare$,--,B,$\blacksquare$}{%
    \node[font=\bfseries\Huge] (txt) at (\hsp*\n,0){\s};%
}},%
    inlinesymbols/.style={%
        decoration={markings,mark =between positions 0 and 1 step 30mm % adjust step size here
                with {\pic {symbols};}},%
        postaction={decorate}}%
}%
\begin{document}
\begin{tikzpicture}
\path[inlinesymbols] (0,-1) -- (4,-1);%
\end{tikzpicture}
\end{document}

如果解决方案能够兼容这是 Sandy G' 的\markletters命令允许从文本字符串生成以逗号分隔的符号列表:

\usepackage{xstring}
\newcommand{\markletters}[1]{\StrLen{#1}[\strlen]\foreach \chr[count=\n from 0] in {1,...,\strlen}{\node[font=\bfseries\Huge] at (\hsp*\n,0){\StrChar{#1}{\chr}};}}%

\tikzset{symbols/.pic={\markletters{$\blacksquare$,--,B,$\blacksquare$}}}%

第一次尝试

谢谢这个漂亮的答案我能够用相同的图像填充整个符号列表(注意:该解决方案似乎仅适用于 jpeg 图像而不适用于 png):

在此处输入图片描述

\documentclass{standalone}
\usepackage{environ}
\usepackage{amssymb}% For \blacksquare symbol
\usepackage{tikz}
\usepackage{tikzlings}
\usetikzlibrary{fadings,calc,decorations.pathmorphing}
\NewEnviron{ShadeTikZ}[2][]{\begin{tikzfadingfrompicture}[name=temp]% https://tex.stackexchange.com/a/510465/262081
\begin{scope}[transparent!0,#1] 
\BODY
\end{scope}
\end{tikzfadingfrompicture}%
\tikz[#1]{\begin{scope}[local bounding box=X,opacity=0]%
\BODY
\end{scope}
\path[overlay] (X.center)  node[opacity=0,inner sep=0pt] (img) {\includegraphics{#2}}
  [path fading=temp,fit fading=false,fading transform={shift={(X.center)}}] 
  let \p1=($(X.north east)-(X.south west)+(0.3,0.3)$),
  \p2=($(img.north east)-(img.south west)+(0.3,0.3)$) in
   (X.center)  node[inner sep=0pt,anchor=center]{\pgfmathsetmacro{\myscale}{max(\x1/\x2,\y1/\y2)}%
  \includegraphics[scale=\myscale]{#2}};%
 }%
}%

\newcommand{\hsp}{.7}

\begin{document}
\begin{ShadeTikZ}[baseline={(txt.base)}]{example-grid-100x100pt}
    \foreach \s[count=\n from 0] in {$\blacksquare$,--,B,$\blacksquare$}{%
    \node[font=\bfseries\Huge] (txt) at (\hsp*\n,0){\s};%
    }%
\end{ShadeTikZ}
\end{document}

我希望这个结果:

在此处输入图片描述

每个符号都用图像的不同部分填充,并且该部分也旋转。

相关内容