black!50与black!20颜色含义解析

目录

[1. 语法与含义解析](#1. 语法与含义解析)

[2. 在 \tikzstyle 中的应用](#2. 在 \tikzstyle 中的应用)

[3. 代码示例与效果对比](#3. 代码示例与效果对比)

[4. 高级混合与颜色模型](#4. 高级混合与颜色模型)

[5. 总结与最佳实践](#5. 总结与最佳实践)

参考来源


在 TikZ 中,black!50black!20 这类语法用于定义颜色的混合色调 ,具体来说是通过 xcolor 宏包提供的颜色混合功能。其核心含义是:用指定百分比的原色与白色进行混合,生成一个更浅的色调

1. 语法与含义解析

语法格式为:<basecolor>!<percentage>

  • <basecolor>:基础颜色名称,如 black(黑)、red(红)、blue(蓝)、green(绿)等。
  • <percentage>:一个介于 0 到 100 之间的整数,表示混合比例。
  • 语义 :生成一种由 <percentage>%<basecolor>(100-<percentage>)%白色 混合而成的颜色。

因此:

  • black!50 表示 50% 的黑色 + 50% 的白色,混合结果为中灰色。
  • black!20 表示 20% 的黑色 + 80% 的白色,混合结果为非常浅的灰色。

这个机制使得从单一基础色轻松创建出具有明度变化的调色板成为可能,常用于设置图形的填充色(fill)、描边色(draw)或文本颜色(text)。

2. 在 \tikzstyle 中的应用

在你的代码片段 \tikzstyle=black!50,fill=black!20](注:通常应为 \tikzstyle{stylename}=[options] 格式)中,这很可能是在定义一个 TikZ 样式。其作用是为图形元素(如节点、箭头)预设一组绘图属性 。

  • draw=black!50:设置图形轮廓(描边)的颜色为 black!50(中灰色)。
  • fill=black!20:设置图形内部填充的颜色为 black!20(浅灰色)。

这会产生一个具有中灰色边框和浅灰色填充的图形效果,视觉上层次分明且柔和。

3. 代码示例与效果对比

下面的示例展示了不同百分比混合色的实际效果,并对比了其在节点样式中的应用。

latex 复制代码
\documentclass{article}
\usepackage{tikz}
\begin{document}

% 示例1:展示 black!X 的色阶
\begin{tikzpicture}
  \foreach \shade [count=\i] in {0,10,20,30,40,50,60,70,80,90,100} {
    
ode[rectangle, minimum width=1.5cm, minimum height=0.8cm, draw=black, fill=black!\shade, label=below:{black!\shade}] at (\i*1.6, 0) {};
  }
  
ode at (9, 1.5) {`black!<百分比>` 色阶示例 (0=白,100=黑)};
\end{tikzpicture}

% 示例2:使用你提供的样式定义节点
\tikzset{
  mynode/.style={
    draw=black!50,       % 边框为中灰色
    fill=black!20,       % 填充为浅灰色
    thick,               % 边框加粗
    minimum width=2cm,
    minimum height=1cm,
    text centered
  }
}

\begin{tikzpicture}
  % 应用自定义样式
  
ode[mynode] at (0,0) {节点A};
  % 对比:纯黑色边框和填充
  
ode[draw=black, fill=black!80, thick, minimum width=2cm, minimum height=1cm, text=white, text centered] at (3,0) {节点B (高对比)};
  % 对比:无填充
  
ode[draw=black!50, thick, minimum width=2cm, minimum height=1cm, text centered] at (6,0) {节点C (仅边框)};

  
ode at (3, -2) {对比:`draw=black!50, fill=black!20` 创造了柔和、有层次感的视觉效果};
\end{tikzpicture}

\end{document}

为了更清晰地理解不同参数组合的效果,下表对比了几种常见的 drawfill 设置:

样式设置 (draw, fill) 视觉效果描述 适用场景
draw=black, fill=white 黑色实线边框,白色填充。标准、高对比度 需要突出显示的节点、流程图中的关键步骤 。
draw=black!50, fill=black!20 中灰色边框,浅灰填充。柔和、有层次感,视觉负担轻。 流程图中的普通步骤、背景或分组框、不希望过于突兀的元素 。
draw=black!30, fill=black!10 更浅的灰色边框和填充。非常淡雅,接近背景色。 次要注释、背景层、引导线。
draw=black!80, fill=black!90, text=white 深灰边框,接近黑色的填充,白色文字。深色主题 需要强调或作为视觉焦点的特殊节点 。
draw=red!50, fill=red!20 红色系混合。边框为粉色,填充为浅粉。彩色主题 警告、错误、特殊状态标记。
draw=none, fill=blue!20 无边框,仅有浅蓝色填充。简洁、现代 数据块、标签、纯色背景区域。

4. 高级混合与颜色模型

xcolor 宏包的功能远不止与白色混合。更通用的语法是:<colorA>!<percentage>!<colorB>,这表示生成一种由 <percentage>%<colorA>(100-<percentage>)%<colorB> 混合而成的颜色 。当省略 <colorB> 时,默认就是白色。

latex 复制代码
\begin{tikzpicture}
  % 红色与蓝色混合
  
ode[circle, fill=red!50!blue, minimum size=1.5cm] at (0,0) {红+蓝};
  % 绿色与黄色混合
  
ode[circle, fill=green!70!yellow, minimum size=1.5cm] at (3,0) {绿+黄};
  % 等同于 black!50
  
ode[circle, fill=black!50!white, minimum size=1.5cm] at (6,0) {黑+白};
\end{tikzpicture}

此外,你还可以使用其他颜色模型,如 RGB、HTML(十六进制)、CMYK 等来定义基础色,然后再进行混合。

5. 总结与最佳实践

  1. 核心目的<color>!<percentage> 语法主要用于快速生成同一色系下不同明度(亮度)的颜色,无需手动计算 RGB 值,极大提升了绘图效率和视觉一致性 。
  2. 数值选择
    • 0:纯白色(或混合色中的第二种颜色)。
    • 100:纯基础色。
    • 数值越小,颜色越浅、越接近白色;数值越大,颜色越深、越接近基础色。
    • 50 20 这类中间值,能产生专业、不刺眼的视觉效果。
  3. 在样式定义中的优势 :通过在 \tikzstyle\tikzset 中使用混合色,可以一次性为整个图表定义一套协调的配色方案。修改基础色或百分比,就能轻松切换整体色调 。
  4. 与透明度 (opacity) 的区别 :颜色混合 (!) 是生成一种新的不透明颜色 。而 opacityfill opacity/draw opacity 属性是设置整个图形或描边/填充的透明度,会让下方的图形透过来。两者视觉效果有时相似,但原理和适用场景不同 。

参考来源

相关推荐
月昤昽9 小时前
TikZ坐标单位详解
latex·tikz
basketball6161 天前
Latex常用符号表示方法
latex
secondyoung4 天前
Markdown数学公式语法速查手册
算法·编辑器·markdown·latex
喝凉白开都长肉的大胖子6 天前
latex 中改变其中一部分文本颜色
latex
迷路爸爸1809 天前
VSCode / Cursor 中 LaTeX Workshop 的 settings.json 配置:编译与 SyncTeX 跳转
ide·vscode·json·latex
weixin_4166600710 天前
豆包公式转Word,乱码解决
word·latex·豆包
lijfrank13 天前
MacOS 下 VS Code + LaTeX + Skim 双向同步配置
vscode·macos·pdf·latex·mactex
爱叨叨的小嘟14 天前
Latex公式 转 word可编辑公式
word·typora·latex
weixin_4166600723 天前
原创分享:Markdown 转 Word 工具,一键导出Word/PDF文档
pdf·word·latex·deepseek