用Typora写Markdown时间久了,你迟早会碰到一个需求:想把某一段文字标成红色,或者把重要的结论用另一种颜色区分出来。但打开Typora的菜单和工具栏翻一圈,会发现它压根没有像Word那样直接改字体颜色的按钮。于是不少人在这一步就被劝退了,以为Typora不支持颜色标注。实际上,Typora能改颜色,只不过入口藏得比较深,而且不止一种改法。
我平时用Typora写技术笔记、维护项目文档、整理阅读摘录,对颜色标注的需求一直很大。踩过不少坑之后,我把常用的改色方式整理成了一套完整方案:既有最灵活的内嵌HTML写法,也有适合公式场景的LaTeX配色,还有能一劳永逸的主题CSS定制。这篇内容会把这些方法逐个拆开讲清楚,顺带附上我实际使用时的排查经验。不管你刚接触Typora,还是已经用了很久想系统掌握,这篇都值得花几分钟看完。
1. 先搞清楚:Typora改字体颜色到底卡在哪
1.1 Markdown语法本身的边界
Markdown之所以被这么多人喜欢,核心在于它的语法极简。标题用#、列表用-、加粗用两个星号,几乎不引入额外的视觉概念。这种设计的初衷是“内容与样式分离”,同一个md文件放到不同的渲染器里,可以自动适配各自的主题风格。
但这也带来一个直接后果:Markdown原生语法里没有“颜色”这种东西。你写**红色**,只能得到加粗,不能得到红字。Typora作为一个所见即所得的Markdown编辑器,它的渲染流程遵循CommonMark规范,同时也保留了HTML标签的解析能力。也就是说,Typora能显示颜色,靠的不是Markdown语法本身,而是它对HTML和CSS的深度支持。
搞清楚这一点,你就能理解为什么Typora里改颜色没有一键按钮。这不是功能缺失,而是设计取向问题。想改颜色,本质上有三条路可以走:一是直接用内嵌HTML标签,二是在LaTeX公式里用颜色命令,三是通过自定义主题CSS让某些元素自动变成你想要的颜色。后面三个部分,我分别展开讲。
1.2 三条主路线的选择思路
先给这三条路做一个快速对比。行内HTML方案,灵活度最高,随便哪个位置都能用,不需要额外配置,适合日常笔记里给关键句子上色。LaTeX方案,只在数学公式场景里最自然,如果你想在公式里给变量标色,或者习惯用$...$包裹文本,这条路值得掌握。主题CSS方案,属于“全局玩法”,一旦配好,整个文档的标题、引用、代码块、高亮标记都会按你的规则来,适合对审美有要求、希望统一文档风格的人。
我的个人建议是:日常用行内HTML就够解决80%的需求。剩下的20%交给LaTeX和CSS,等你真正遇到对应场景再去学也不迟。下面我会按“先易后难、从局部到全局”的顺序,把这三种方式全部演示一遍。
2. 行内HTML方案:最常用也最实用
2.1 基础语法与适用场景
在Typora里直接写HTML标签,预览模式会实时渲染。最基础也最容易记的写法是font:
<font color="red">这段文字会显示成红色</font>打开Typora,输入这行文字,按下Ctrl+/切换一下源码和预览模式,你就能看到效果。color属性支持常见的英文颜色名,支持#开头的十六进制色值,也支持rgb()函数写法:
<font color="#e74c3c">十六进制红色</font> <font color="rgb(231, 76, 60)">RGB红色</font>不过说实话,我推荐你尽量用span加style的写法,而不是font标签。原因很简单:font是HTML 4时代的标签,HTML5里已经不推荐用了。虽然Typora为了兼容还会继续渲染它,但从长期角度和可定制性来讲,span明显更强。同样一个红字,用span写是这样的:
<span style="color: #e74c3c;">这段文字会显示成红色</span>span最大的优势在于,style属性里能放的CSS规则远比color一个属性丰富。比如我想做一个高亮警告文字,白字、红底、带圆角:
<span style="color: #ffffff; background-color: #e74c3c; padding: 2px 4px; border-radius: 3px;">关键警告</span>这样的效果在笔记里非常醒目,用来标记“重要提醒”“别踩坑”比单纯加粗好用得多。我写技术文档时经常用这种组合,读者扫一眼就能注意到。
2.2 进阶玩法:把颜色、背景、字号组合起来
当你掌握了span的基础用法,就可以在style里组合更多属性。以下几个是我高频使用的组合:
<span style="color: #27ae60; font-weight: bold;">✓ 已完成</span> <span style="color: #f39c12; background-color: #fef5e7; padding: 2px 6px; border-radius: 4px;">⚠ 待确认</span> <span style="color: #2c3e50; font-size: 14px; border-bottom: 2px solid #3498db;">带有下划线的说明文字</span>第一个组合给完成状态标了绿色加粗,第二个组合把待确认事项做成黄底橙字的胶囊样式,第三个组合用蓝色下划线突出补充说明。这些效果放在README、项目周报、学习笔记里都非常适用。
需要注意一个问题:style属性里如果写了多个CSS规则,规则之间必须用英文分号分隔,最后一个规则后的分号可以省略,但建议都写上。很多新手在复制代码时把中文输入法打开,结果分号、引号全部变成中文符号,Typora会直接解析失败。这个细节看起来低级,实际踩坑的人很多。
另外,如果你是重度Markdown用户,建议养成一个习惯:写完包含HTML标签的段落,偶尔按Ctrl+/切到源码模式看一眼。因为Typora的所见即所得模式下,你可能会在标签中间误回车换行,导致标签断成两半,渲染出来一团糟。源码模式下一切都很清楚。
2.3 把常用颜色保存成片段,省掉重复劳动
行内HTML虽然灵活,但每次都手敲<span style="color:..."></span>这串东西确实浪费时间。我自己的做法是借助系统层面的“文本替换”功能,把常用颜色做成代码片段,输入短口令自动替换成完整标签。
在macOS上,你可以打开“系统设置 -> 键盘 -> 文本替换”,添加一个替换规则。比如输入;red自动替换成<span style="color: #e74c3c;"></span>。在Windows上,可以用PowerToys的“文本粘贴”功能或者输入法的自定义短语,效果类似。我个人用的是输入法自定义短语,无论在哪台电脑、哪个编辑器里都能生效,不用额外装软件。
这里给出一份我常用的颜色速查表,颜色名、应用场景、十六进制值都列清楚了,你可以直接复制到自己的笔记里当字典用。
| 用途 | 颜色名称 | 十六进制值 | 使用场景 |
|---|---|---|---|
| 强调重点 | red | #e74c3c | 必须处理的事项、重要提醒 |
| 警告提示 | orange | #f39c12 | 待确认、风险提示 |
| 完成状态 | green | #27ae60 | 已完结、成功、通过 |
| 背景信息 | blue | #2980b9 | 补充说明、参考链接 |
| 次要说明 | gray | #7f8c8d | 注释、语气弱化 |
| 自定义高亮 | 浅黄底 | background-color: #fff3cd | 标出关键词、待复习段落 |
搭配一个简单的输入逻辑,比如;red=红色、;org=橙色、;grn=绿色、;blu=蓝色,大部分标色需求几秒钟就能完成,体感上跟用Word点了一下按钮差不多。
3. LaTeX公式配色方案:适合正文里的数学标注
3.1 为什么LaTeX也能改颜色
有些用户喜欢把正文里的变量、公式、行内数学符号用$...$包裹起来写,比如$x$、$\alpha$这类。如果你也有这个习惯,那么恭喜你,Typora内置的MathJax渲染引擎可以直接支持LaTeX的颜色命令。只要在公式里加上\color或者\textcolor,就能给文字和符号上色。
基本的语法有两种:
$\color{red}x$ $\textcolor{blue}{y}$区别在于,\color{red}x会把后面所有内容都变成红色,直到当前公式结束;\textcolor{blue}{y}则只给花括号里的y上色。在正文标注场景中,\textcolor更安全,不容易把不需要变色的符号也带跑。
需要说明的是,Typora默认可能不开启行内公式的渲染。你需要在“文件 -> 偏好设置 -> Markdown”里,找到“行内公式”并勾选启用。勾选之后,再输入$...$包裹的内容就会按数学公式渲染。如果你的Typora里写了$xxx$但没有变成公式,99%是这一步没开。
3.2 操作步骤与坑位
完整的操作流程是这样的:
- 打开“偏好设置 -> Markdown”,勾选“行内公式”;
- 在正文里输入
$\textcolor{red}{重点}$; - 光标移出公式区域后,Typora会实时渲染成红色数学字体。
如果你觉得默认的数学斜体不好看,可以改成正常字体:
$\textcolor{red}{\text{重点}}$\text{}命令可以把里面的内容按照正文字体渲染,不再使用数学斜体。这样看起来更像是“红色文字”,而不是“红色的数学符号”。
使用LaTeX方案有四个高频坑,我分别说明一下:
第一,公式里的空格。LaTeX语法里,默认按一个空格处理,多个连续空格会被忽略。想强制加空格要用\或者\quad。如果你为了对齐效果敲了一堆空格,渲染出来很可能挤在一起。
第二,下划线和特殊字符。在LaTeX里,_和^有特殊含义,分别代表下标和上标。如果你要显示的文本里包含a_b这种内容,必须写成a\_b,否则会渲染异常。
第三,中文支持。MathJax对中文的渲染支持大体没问题,但某些主题下的字体样式可能略微不同,不会影响功能。
第四,导出兼容性。LaTeX颜色导出PDF时一般能保留,但如果你换用其他Markdown编辑器打开同一个md文件,那些地方用行内HTML。这样做的好处是,需要迁移到其他平台时,大部分内容依然保持可读性。
4. 自定义主题CSS:一劳永逸的全局改色思路
4.1 定位Typora的主题文件位置
日常笔记用行内HTML已经足够,但如果你想让整个文档的标题、引用块、代码、高亮标记自动具备统一的配色风格,就得动手改主题了。Typora支持用户自定义CSS,而且提供了一条非常友好的路径:“偏好设置 -> 外观 -> 打开主题文件夹”。
点击这个按钮,系统会打开一个文件夹,里面存放着该主题的CSS文件。Typora的加载机制是这样的:每个主题对应一个.css文件,同时存在两个额外的用户自定义文件,base.user.css和当前主题名.user.css。base.user.css对所有主题生效,当前主题名.user.css只在切换到对应主题时生效。
在实际操作中,我强烈建议你在“当前主题名.user.css”里写样式,尽量不要直接改主题原始的.css文件。因为Typora后续更新或切换主题时,原始文件可能被覆盖,而.user.css文件会在主题渲染之后自动加载并覆盖同名规则,优先级更高,也更安全。这个思路适用于几乎所有的CSS定制,修改源码前先想想会不会被更新冲掉。
4.2 写一个实用的.user.css示例
下面这段CSS是我个人常用的一份基础样式,主题用了GitHub风格时,放在github.user.css里正好:
/* 让一级标题更沉稳 */ h1 { color: #2c3e50; border-bottom: 1px solid #ecf0f1; } /* 行内代码改成深红字+浅粉底 */ code { color: #c0392b; background-color: #fdf0ef; padding: 2px 4px; border-radius: 3px; } /* 引用块左侧的装饰条改成橙色 */ blockquote { border-left-color: #e67e22; background-color: #fef9f0; } /* 高亮标记mark改成黄底黑字 */ mark { background-color: #fff3cd; color: #333333; }保存后回到Typora,在“偏好设置 -> 外观”里切换到另一个主题再切回来,或者直接用快捷键Ctrl+Shift+P调出命令面板执行“重新加载当前窗口”,新样式就会生效。这里的code选择器会影响所有行内代码段,mark则作用于你通过==文字==语法生成的高亮文本。
更进一步,你还可以自定义一个类名,配合行内HTML使用。我在写周报时经常用<span class="tag-done">已完成</span>这种写法,在CSS里定义一个tag-done类,然后用多篇文章复用这一套样式:
.tag-done { color: #27ae60; background-color: #e8f8f0; padding: 2px 6px; border-radius: 4px; font-size: 13px; }这样既享受了行内HTML的灵活性,又能做到全站风格统一,改一处样式所有引用位置跟着变。长期整理文档库的时候,这套方案比每处都手写完整style属性舒服得多。
4.3 主题文件不生效的常见原因
CSS写了但没生效,很多人都遇到过。我梳理了几个高频原因:
第一个原因是文件名或者存放位置不正确。.user.css文件必须放在主题文件夹根目录下,且文件名必须是base.user.css或当前主题名.user.css,放错层级或者写错主题名都不会加载。
第二个原因是没“重新加载”。CSS文件修改后,Typora不会实时热更新,必须重新加载窗口或切换主题。最简单的做法是打开“偏好设置”再关闭,或者执行一次“重新加载当前窗口”。
第三个原因是选择器优先级不够。比如你写了code { color: red; },但主题原样式里写了#write code { color: blue; },因为#write这个ID选择器的优先级更高,你的规则会被覆盖。这时候可以用开发者工具(Typora里按Ctrl+Shift+I)查看实际生效的样式,然后用手动调整选择器的方式解决。
第四个原因是个别主题自身带有强制颜色规则。比如某些夜间主题会给代码块整体覆盖一层背景色,这种情况下仅改code的color不够,还需要同时改背景色或使用!important(能少用就少用,但实在不行用它也无可厚非)。用开发者工具定位到具体元素,再针对性地补规则,是最稳妥的排查路径。
5. 实操场景串联:颜色标注在笔记里的正确打开方式
5.1 场景一:阅读笔记里的重点标色
我平时读技术文章,习惯于把核心观点、自己的思考、待补充的知识点分别用不同颜色标注。举个例子,我在整理一篇关于“异步编程”的文章时,笔记可能是这样的:
<span style="color: #2980b9;">背景:</span>异步编程是为了解决高并发场景下的阻塞问题。 <span style="color: #e74c3c;">核心观点:</span>不要用线程池处理所有任务,IO密集和CPU密集需要不同策略。 <span style="color: #f39c12;">待补充:</span>理解事件循环的调度顺序,以及微任务和宏任务的执行时机。这三行代码在Typora里分别显示为蓝、红、橙三种颜色。回过头来复习时,我不用重新读全文,只扫一眼“待补充”色块就知道哪块知识需要补强。这种视觉索引的作用,单纯靠加粗和列表很难替代。颜色本质上是一个注意力过滤层,让你在大量信息里快速定位自己关心的那部分。
如果你的笔记要给别人看,建议在文章开头加一个简单的颜色说明,比如“红色表示重点结论,橙色表示待确认,蓝色表示背景信息”,这样读者也能快速理解你的标注规则。我自己的经验是,一个文档里的颜色不要超过三种,颜色一旦太多,视觉噪声会淹没有效信息。
5.2 场景二:项目维护日志里的状态标记
写项目周报或者维护日志时,状态标记是一个非常典型的应用。以前我常常用文字描述“这个需求还在评估”“那个Bug已修复”,后来改成颜色标记后,周报的扫读效率明显提升。比如:
- <span style="color: #e74c3c;">⛔ 待排期:</span>首页性能优化方案 - <span style="color: #f39c12;">⏳ 进行中:</span>用户中心接口改造 - <span style="color: #27ae60;">✅ 已完成:</span>登录页多端适配这里的HTML标签可以用上一节说到的tag-类名代替,配合自定义CSS,全文档状态色值保持一致。更重要的是,你可以把状态标记整理成表格,让别人快速掌握全局。下面是我常用的一个周报状态表:
| 状态 | 颜色标记 | 含义说明 |
|---|---|---|
| 待排期 | 红色 | 尚未安排资源,需要管理层决策 |
| 进行中 | 橙色 | 已有负责人,正在推进 |
| 已完成 | 绿色 | 已合入主干并验证通过 |
| 暂停 | 灰色 | 暂时挂起,等待依赖条件 |
颜色让表格里的每一行都多了一个可快速识别的维度。人的视觉系统对颜色的响应速度远高于对文字的解码速度,这一点用在项目进度汇报上非常讨巧。
5.3 场景三:在流程图的节点文字里调整配色
Typora内置Mermaid流程图支持,很多人写技术文档时都会用到。如果你希望在Mermaid节点里呈现不同颜色的文字,直接在节点标签里写HTML标签有时候会被过滤掉,尤其是当Mermaid开启了HTML安全策略时。更稳的方式是使用Mermaid的classDef语法给节点定义样式,包括文字颜色。比如你想把某个节点标成红色,可以在Mermaid代码块里声明一个类,再把它应用到节点上。
实际操作中,我一般这样处理:先在文档底部统一维护一份节点样式声明,用短名称代替完整的颜色定义,需要给节点上色时,只用追加类名即可。这样避免在代码块里散落大段CSS,结构也更清晰。
需要额外注意的是,Typora的不同版本对Mermaid的解析细节略有差异。如果你发现自己写的classDef没有生效,先检查Mermaid的版本和语法是否匹配,再到源码模式里确认节点ID的写法是否正确。颜色不生效的时候,多半是类名和节点ID对不上,或者样式规则里不小心写了中文符号。
6. 常见问题与排查技巧实录
6.1 颜色没有生效,可能是什么原因
这个问题我在各个社群里见过无数次,自己也踩过。逐条排查的顺序应该是:
第一,检查引号与分号。确保你的代码里用的全部是英文半角符号。一个中文引号足以让整个标签失效。尤其是从微信公众号、PDF或聊天记录里复制代码时,引号很容易被替换成中文全角版本。
第二,检查标签闭合。<span>必须配</span>,<font>必须配</font>。在所见即所得模式下,标签闭合错误不会报错,只是显示效果不符合预期,有时候甚至整段文字都变成普通文本。
第三,检查color值的写法。color: red是可行的,color: #e74c3c也是可行的,但如果你漏写#,或者把#e74c3c写成了#e74c3c;后面又追加了其他内容,都可能解析异常。
第四,检查主题覆盖。如果你的自定义样式与当前主题冲突,主题默认样式可能覆盖你的规则。解决方式是在CSS里提升优先级,或使用开发者工具查看实际生效的样式。
第五,如果用了LaTeX方案,确认行内公式功能已开启,且公式没有被Typora当成块级公式处理。
6.2 导出PDF后颜色丢失怎么处理
Typora在导出PDF时,理论上会保留文档中HTML标签的颜色样式。但你依然可能遇到几个问题:
第一个场景,导出的PDF里自定义CSS类失效。原因是导出时Typora不一定加载了.user.css文件里的全部规则。解决办法是在导出设置里确认勾选了“使用当前主题”,或者干脆把关键颜色直接写成行内style,不要依赖自定义类。
第二个场景,颜色保留但字体或者背景变了。这通常是因为PDF导出时用到的打印样式和屏幕样式不完全一致。可以尝试切换不同主题后再次导出,找到与你审美最接近的组合。
第三个场景,导出为其他格式时颜色丢失。比如导出为纯文本、docx等格式时,很多格式化信息会被剥离。这不是Typora的Bug,而是格式本身不支持这种内联样式。如果要在Word里使用带颜色的文档,建议直接导出HTML再用Word打开,或者从HTML粘贴时选择“保留源格式”。
6.3 其他高频问题速查
除了字体颜色,Typora里还有几个“排版三连”问题也频繁被问到:图片居中、文字上下居中、Mermaid标题样式。我把对应的解法整理成一个速查表,方便你一次性搞定:
| 问题 | 常用解决方案 | 适用场景 |
|---|---|---|
| 图片水平居中 | 在图片前后各加一行<center>和</center>标签 | 单个图片居中 |
| 图片整体居中并由CSS控制 | 自定义.user.css中定义img { display: block; margin: 0 auto; } | 全文档图片统一居中 |
| 单元格文字上下居中 | 表头加<center>标签,或自定义表格样式 | 表格排版优化 |
| Mermaid标题文字颜色 | 用classDef给节点定义color属性 | 流程图节点配色 |
| 行内代码改背景色 | 修改主题CSS中code选择器的background-color | 统一代码样式 |
| 文字垂直居中(单行) | 使用line-height与容器高度一致 | 按钮、标签元素样式 |
这些问题看起来零散,但背后其实都是“Typora用HTML和CSS做增强排版”这一思路的具体应用。掌握了这个思路,遇到新的排版需求你自然会知道从哪里下手。
6.4 一段私藏的“避坑”心得
最后分享一个我自己在长时间使用中总结出来的小经验:使用行内HTML给文字上色时,尽量把标签限制在一个段落内,不要跨段落使用。因为Typora的段落块级元素机制在某些版本下会把你两个段落之间的</span>解析到奇怪的层级,导致后续所有内容都被迫继承颜色。最典型的情况是,你给一段文字标了红色,但接下来的几个自然段全都变红了。排查了很久才发现,是前一个段落里少写了一个闭合标签。
另外还要注意,Typora的所见即所得模式有时候会让你产生“标签已经存在”的错觉。在你不确定某处颜色是否由标签控制时,直接切到源码模式搜索结果是最快的办法。
我个人在实际使用中,已经养成了“源码模式录入、预览模式校对”的习惯:写大量带HTML标签的内容时先在源码模式里完成,再切到预览模式检查效果。这样可以避开很多标签解析相关的坑,也方便日后别人接手你的文档时能看懂结构。
改字体颜色这个需求,说小很小,说大也真的会影响一天的心情和工作效率。掌握了行内HTML、LaTeX、主题CSS三条路线之后,Typora在你手里才算真正打开了自定义排版的门。下一次遇到“这个字要是换个颜色就好了”的念头,直接动手写一行标签,比换编辑器、换工具都省事。