tikz 样式突出显示标签中的大写字符

tikz 样式突出显示标签中的大写字符

我希望能够突出显示节点标签中的大写字母。即我所附的示例,我希望看到“LaBel”中的 L 和 B 为红色,而所有其他字符为黑色。

是否可以定义一种 tikz 样式,以红色显示节点标签中的大写字符,以黑色显示所有其他字符?

\documentclass{article}
\usepackage{tikz}

\tikzset{
    blocktiny/.style={rectangle,draw,font=\tiny}
}

\begin{document}
\begin{tikzpicture}

\node[blocktiny] (node1) {LaBel};

\end{tikzpicture}
\end{document}

答案1

我引入了\hluc{}搜索大写 ascii 来突出显示。它递归调用\hlucaux,每次检查完整参数中的一个字母。当找到大写字母时,它会应用red文本颜色。

\hlucaux代码中

\ifnum`#1>`@

测试 ASCII 值是否大于@,该值在 ASCII 表中紧接着A,并且测试

\ifnum`#1<`[

测试小于 的 的 ascii 值[,该值紧随Zascii 表中的后面。这两个测试的交集仅对大写字母测试为真。

\documentclass{article}
\usepackage{tikz}
\newcommand\hluc[1]{\hlucaux#1\relax}
\def\hlucaux#1#2\relax{%
  \ifnum`#1>`@\relax%
    \ifnum`#1<`[\relax%
      \textcolor{red}{#1}%
    \else%
      #1%
    \fi%
  \else%
    #1%
  \fi%
  \ifx\relax#2\else\hlucaux#2\relax\fi%
}
\tikzset{
    blocktiny/.style={rectangle,draw,font=\tiny}
}

\begin{document}
\begin{tikzpicture}

\node[blocktiny] (node1) {\hluc{LaBel}};

\end{tikzpicture}
\end{document}

在此处输入图片描述

当然,连字符会在此过程中丢失(尽管规范blocktiny已经这样做了),大小写之间的字距调整也会丢失。

\documentclass{article}
\usepackage{tikz}
\newcommand\hluc[1]{\hlucaux#1\relax}
\def\hlucaux#1#2\relax{%
  \ifnum`#1>`@\relax%
    \ifnum`#1<`[\relax%
      \textcolor{red}{#1}%
    \else%
      #1%
    \fi%
  \else%
    #1%
  \fi%
  \ifx\relax#2\else\hlucaux#2\relax\fi%
}
\tikzset{
    blocktiny/.style={rectangle,draw,font=\tiny}
}

\begin{document}
\begin{tikzpicture}
\node[blocktiny] (node1) {\hluc{LaBel}};
\end{tikzpicture}

\begin{tikzpicture}
\node[blocktiny] (node1) {\hluc{Ta}Ta};
\end{tikzpicture}
uc/lc kerning is lost

\begin{tikzpicture}
\node(node1) {\hluc{fi}fi};
\end{tikzpicture}
ligatures are lost

\begin{tikzpicture}
\node[blocktiny](node1) {\hluc{fi}fi};
\end{tikzpicture}
but blocktiny already loses ligatures

\end{document}

在此处输入图片描述

相关内容