我希望能够突出显示节点标签中的大写字母。即我所附的示例,我希望看到“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 值[
,该值紧随Z
ascii 表中的后面。这两个测试的交集仅对大写字母测试为真。
\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}