简介这是一款面向中文写作场景的 Typora 学术风格主题基于官方 Academic 主题改造正文字体采用华文中宋等宽字体采用 CamingoCode并专门将代码块调整为带外边框的样式更适合论文、技术笔记等正式排版。包内共14个文件以 woff 字体文件为主覆盖 STIX 公式字体、中文字体与等宽字体包含2个 css 样式文件、2个 pdf 说明文档以及 md 说明和 txt 许可证文本整体压缩包约15.46MB解压到 Typora 主题文件夹即可使用。目前已有451人学习下载适合需要在中文学术写作中获得更规整观感的 Typora 用户无论是撰写课程论文、期刊投稿还是技术博客都能快速获得符合中文阅读习惯的版式。资源内含完整主题配置、所需字体、安装说明与效果预览也可基于 CSS 自行调整代码块样式或对齐方式便于打造个人写作环境。1. 中文学术主题不是换皮肤是重排版用 Typora 写中文论文、课程报告和技术博客的人大多有过同一个瞬间编辑器里看着舒服导出 PDF 后行距挤成一团中文首行没缩进表格竖线密得像报表。这不是 Typora 的错是默认主题按英文网页设计没考虑汉字排版。Typora-Academic-Zh 这个方向做的事是把「正文宋体、标题黑体、首行缩进两字符、表格三线表、PDF 分页合理」这套中文学术规则写进 Typora 主题。适合正在写论文初稿、交课程报告或者想让博客排版像正式出版物的人。下文从主题加载机制讲到字体、表格、代码块的定制最后给出导出 PDF 的收尾方案。2. 主题加载机制你的 CSS 到底作用在 Typora 的哪一层先说结论Typora 的主题就是一组 CSS 文件预览区里的所有内容被包在一个#write容器中主题通过选择器去命中它。这不是黑匣子理解了加载链路后面所有样式问题都能自己排查。Typora 每次启动会读取主题目录下的.css文件先加载内置基础样式基座再叠加你的主题样式。同优先级下后出现的规则生效。所以主题文件名、选择器特异度、样式书写顺序直接决定你的规则能不能盖过默认样式。2.1 主题目录与启停两条命令看清加载链路主题目录的位置随操作系统不同。macOS 在用户的 Application Support 目录下Windows 在%APPDATA%下Linux 在~/.config下。用下面的命令直接打开当前系统的主题目录# macOS open ~/Library/Application Support/typora/themes # Windows在 cmd 或 PowerShell 里运行 explorer %APPDATA%\Typora\themes # Linux多数发行版 xdg-open ~/.config/Typora/themes目录里每个.css文件对应一个主题名。比如放一个academic-zh.css进去重启 Typora 后偏好设置 → 外观 → 主题里就会出现Academic Zh。修改后的 CSS 也要重启 Typora 或通过开发者工具强制刷新才能看到效果这算是最早遇到的一个「不是 bug 的 bug」。这里有个实际建议不要直接改内置主题文件新建一个专属 CSS 文件比如academic-zh.css这样升级 Typora 时不会被覆盖。另外你可以在该文件顶部import其他基础主题但中文学术定制一般不需要直接写全量规则更可控。2.2 从 :root 变量到正文样式最小骨架学术主题不是换几个颜色而是把「设计变量」集中起来方便后面逐项调参。CSS 自定义属性变量天然适合做这件事/* academic-zh.css 最小骨架 */ :root { --accent-color: #8b1a1a; /* 主题色深红适合中文论文点缀 */ --font-serif: Source Han Serif SC, SimSun, Songti SC, serif; --font-sans: Source Han Sans SC, Microsoft YaHei, sans-serif; --base-font-size: 16px; /* 预览时正文基准字号 */ --line-height: 1.75; /* 中文阅读行距比英文宽松 */ } #write { font-family: var(--font-serif); font-size: var(--base-font-size); line-height: var(--line-height); color: #1a1a1a; }--accent-color建议只用于少量强调元素比如标题、表格表头、链接正文保持纯黑或近黑这是中文学术排版和「颜值向主题」最大的不同。--base-font-size设 16px 是为了屏幕阅读舒服导出 PDF 时打印样式会单独覆盖成 pt 单位预览和打印分离这是后面避坑章的伏笔。调试时用快捷键呼出开发者工具右键正文区域选择「检查」就能看到每个元素的盒模型、字体、外边距改完即时生效。很多「主题不生效」的翻车现场其实是自己写的选择器特异度不够在开发者工具里一搜就现形。变量默认值示例控制对象--base-font-size16px全站正文字号--line-height1.75正文行距中文建议 1.6~1.8--font-serif宋体/思源宋体正文与表格字体--font-sans黑体/微软雅黑标题与 UI 类文字--accent-color#8b1a1a标题线与表头强调色3. 中文排版的四个核心样式字体栈、缩进、间距与标点中文学术排版和外文最大的差异不在配色而在字与字、行与行之间的关系。这一章直接给四个可抄的样式块每块都解释为什么这么写。3.1 中文字体栈怎么写才不翻车中文学术正文首选衬线字体也就是宋体家族标题首选黑体家族。但不同操作系统自带字体不一样Windows 有 SimSunmacOS 是 Songti SCLinux 常见 Noto Serif CJK SC。字体栈就是按优先级排候选名单让系统自己挑第一个存在的字体#write { /* 英文优先 Times New Roman中文自动回退到系列中的宋体 */ font-family: Times New Roman, Source Han Serif SC, Noto Serif CJK SC, SimSun, Songti SC, serif; } /* 标题统一走黑体系 */ #write h1, #write h2, #write h3, #write h4, #write h5, #write h6 { font-family: Source Han Sans SC, Noto Sans CJK SC, Microsoft YaHei, PingFang SC, sans-serif; }把Times New Roman放在最前面是基于「字体回退」机制英文字符在 Times 里有字形直接用 Times汉字在 Times 里没有字形系统自动往下找命中宋体。这比给每个英文单词手动包span靠谱得多一套字体栈同时处理中英文混排。中文标点则跟随中文字体渲染不会出现半角逗号漂在行首的尴尬。注意字体名要带引号尤其带空格的名称。serif和sans-serif是通用兜底永远放在最后。字体栈里不要放「华文细黑」这类只在审美上好看但覆盖率低的字体否则 Linux 用户打开就是一片默认无衬线。3.2 首行缩进与段落间距正文观感的基座中文出版物的分段习惯是「首行缩进两字符」这对应 CSS 的text-indent: 2em。为什么用 em 而不是 2ch 或固定 px因为中文全角汉字宽度约等于 1em2em 就是两个字而且它跟随字号缩放导出 PDF 时字号变成 12pt缩进自动保持两字宽#write p { text-indent: 2em; margin-top: 0; margin-bottom: 0.5em; } /* 这些场景里的段落不要缩进否则视觉错位 */ #write li p, #write blockquote p, #write pre p, #write table p { text-indent: 0; }区分两种学术排版习惯论文和报告走「缩进分段」段间不空行代码里把margin-bottom改成0即可技术博客走「空行分段」保留0.5em。我一般两套都写在文件里注释掉一套换风格时改一行。如果你看到某些段落缩进失效先看它是不是落在了li p或blockquote p里这两个地方是最容易误伤的。段落间距和行距是两回事行距由line-height控制字行之间的空隙段距控制段落之间的空隙。中文 1.75 的行距会比英文默认值大原因是汉字字面偏高行距太小会显得密不透风代码块和表格里行距反而要收窄否则垂直方向会撑得很散。3.3 标题层级让提纲一眼分出主次标题用黑体字号递减权重不需要太重中文黑体本身就够醒目。关键是处理好标题与上下文的留白——标题下间距小于标题上间距这是出版物的通用习惯#write h1 { font-size: 1.8em; margin: 1.4em 0 0.6em; font-weight: 700; } #write h2 { font-size: 1.5em; margin: 1.3em 0 0.5em; font-weight: 700; padding-bottom: 0.3em; border-bottom: 1px solid #d0d0d0; } #write h3 { font-size: 1.25em; margin: 1.2em 0 0.5em; font-weight: 600; } #write h4 { font-size: 1.1em; margin: 1em 0 0.4em; font-weight: 600; }中文学术还有一个隐藏习惯标题不要用斜体。西文里 italic 是强调层级中文里没有真正意义的斜体浏览器会把汉字做倾斜变换看起来像「被压扁的伪斜体」非常掉价。所以上面所有标题规则里没有font-style真要强调就放大字号或加粗不要斜体。 h2 加border-bottom是给一级小节做视觉分割但注意这条横线默认会通栏拉满想让它只包住文字给 h2 加width: fit-content或者干脆不加线、靠字号和间距区分。4. 三线表、代码块与引用学术组件的样式写法一篇中文技术报告里表格、代码块、引用占了剩下的一半版面。这几个组件的定制逻辑和正文完全不同正文要“稳”组件要“准”。4.1 三线表去掉竖线后的正式感三线表是学术规范的通用语言顶线粗、表头下线细、底线粗中间没有任何竖线。CSS 实现整体思路是「先清空所有边框再画三条线」#write table { border-collapse: collapse; border-top: 1.5pt solid #000; /* 顶线 */ border-bottom: 1.5pt solid #000; /* 底线 */ width: auto; /* 让表格按内容撑开不强制通栏 */ margin: 1em auto; /* 表格水平居中 */ font-size: 0.95em; } #write table th { border-top: none; border-bottom: 0.75pt solid #000; /* 表头下线 */ padding: 0.4em 0.8em; font-weight: 600; } #write table td { border: none; /* 去掉单元格所有竖线和横线 */ padding: 0.35em 0.8em; }边框单位用pt而不是px因为最终打印时物理单位更可靠1.5pt 在屏幕上约等于 2px导出 PDF 则精确对应 0.53mm 线宽。TD 的边框必须显式noneTypora 默认样式会给每个单元格画边框少清一个方向就会出现残留竖线。width: auto是为了防止表格被拉成满行内容少时右侧留白很空。想要「表注」效果可以在表格后紧跟一个斜体小字的段落这是出版物的常规做法。4.2 代码块与行内代码等宽字体的取舍代码是中文学术文档里最「外文」的元素它需要独立的字体、行距和背景不能混用正文宋体#write pre, #write code { font-family: JetBrains Mono, Fira Code, Consolas, Courier New, monospace; } #write code { font-size: 0.9em; background: #f5f5f5; padding: 0.15em 0.4em; border-radius: 3px; } #write pre { font-size: 0.9em; line-height: 1.6; padding: 0.8em 1em; background: #f8f8f8; border: 1px solid #e5e5e5; border-radius: 4px; } /* 代码块里的 code 不再叠加背景否则出现双层底色 */ #write pre code { background: none; padding: 0; }行内code和块级pre是两个场景行内代码只需要和正文区分浅灰底即可代码块需要可读性优先用等宽字体保证对齐行距比正文略紧。pre code里要把背景和 padding 清零这是最常见的重复样式问题——代码块里每个单词都再套一层浅灰底整体看起来像斑马纹。字体栈里放Consolas是为了 Windows 渲染质量JetBrains Mono 或 Fira Code 优先是因为它们的中文注释字形也算协调不会出现汉字和英文高度落差过大的情况。4.3 引用与提示块不喧宾夺主的强调中文学术里的引用多半是文献引文或补充说明不需要大面积变色块一条细竖线加浅灰文字就够克制#write blockquote { border-left: 3px solid #cccccc; margin: 0.8em 0; padding: 0.4em 1em; color: #555555; background: none; } #write blockquote p { font-size: 0.95em; line-height: 1.6; text-indent: 0; }第一行border-left是引用的核心视觉符号颜色用中灰而不是黑色避免和正文抢注意力。background: none必须写不少主题包会给 blockquote 加浅黄或浅蓝底那是博客审美不是学术审美。如果你用 Typora 的 [!note]提示语法它渲染出的元素往往有自己的类名和背景样式这类「提示块」在学术文档里建议统一降级成普通引用样式或者检查元素后单独控制——不同版本渲染出来的类名不完全一样抄网上旧代码容易翻车。5. Typora 中文学术主题避坑清单5 条血泪经验前面章节解决「怎么把样式写对」这一章解决「为什么写对了还是不生效」。以下 5 条是我在调中文学术主题时真实踩过的坑按「现象 → 原因 → 解决」梳理。5.1 字体与导出类问题坑 1预览字号正常导出 PDF 后字号突然变大变小现象预览时 16px 看着舒服导出 PDF 后正文变成小五号甚至更大行距也乱套。原因Typora 导出 PDF 走的是浏览器打印渲染屏幕的 16px 在打印换算时按 96dpi 转换为 pt而打印样式里如果没有显式声明字号默认会取浏览器打印预设值和你预览时的比例完全不同。这不是主题 bug是屏幕媒体和打印媒体天然不一致。解决在主题文件末尾追加打印样式显式声明以 pt 为单位的字号media print { #write { font-size: 12pt; line-height: 1.6; } #write p { font-size: 12pt; } }坑 2macOS 上写了 SimSun 不生效现象字体栈里第一个写SimSunmacOS 上正文还是显示成了苹方或默认衬线。原因SimSun 是 Windows 自带字体macOS 系统里没有这个字形字体栈回退后落到了后面的serif。字体名不存在不会报错只会安静地跳过所以排查起来很迷惑。解决字体栈里兼容多个系统把 macOS 的 Songti SC 也放进去#write { font-family: Times New Roman, Source Han Serif SC, SimSun, Songti SC, serif; }Windows 跑这段会选中 SimSunmacOS 会选中 Songti SCLinux 命中思源宋体。核心原则字体栈是给操作系统看的候选名单不是给你看的心愿单。5.2 样式覆盖与预览类问题坑 3正文段落缩进在聚焦模式下消失现象正常预览时text-indent: 2em生效开启「聚焦模式」后当前正在编辑的那一段缩进没了光标所在段落样式跳变。原因Typora 在聚焦模式下会给当前段落容器加上一层更高特异度或内联样式你写的#write p优先级盖不过它。这是编辑器交互层的正常行为不是 CSS 写错。解决用开发者工具检查聚焦时当前段落的实际类名把缩进规则补充到那个类上比如#write div.md-focus p { text-indent: 2em; }。具体类名以你当前版本实际渲染为准不要照抄网上旧教程Typora 版本升级后类名会变。如果你不在意编辑态样式可以忽略但不要在没查清楚前把它定性为「主题失效」。坑 4CSS 里清了表格边框导出 PDF 仍有竖线现象4.1 的代码写完后预览里三线表正常导出 PDF 后竖线又回来了。原因打印渲染时Typora 会套用一套独立的打印样式某些默认表格边框规则优先级更高或者你只清了 td 没清 th。清理不彻底是主因。解决在打印样式里再次显式清理并覆盖表头media print { #write table td, #write table th { border: none !important; } #write table { border-top: 1.5pt solid #000; border-bottom: 1.5pt solid #000; } }!important在这里是刻意使用的——你要明确否决打印样式里的表格边框而不是靠层叠顺序碰运气。配合开发者工具看 Computed 面板能直接确认最终生效的是哪条规则的哪个属性。坑 5PDF 页边距不对表格一行被拆到两页现象PDF 导出的页边距不是自己想要的版心尺寸长表格的行被拦腰切到下一页。原因没有写page规则Typora 用默认 A4 边距表格跨页时默认的行内不拆分的规则没有覆盖到表格行元素。解决在 CSS 顶层加page并给tr设置拆分保护page { size: A4; margin: 2.54cm 3.17cm; } #write tr { break-inside: avoid; page-break-inside: avoid; /* 兼容旧渲染内核 */ }break-inside: avoid告诉浏览器尽量不把这个元素拆到两页page-break-inside是旧属性两个一起写是习惯性防御。注意它只对短行有效表格自身超过一页时还是要靠合理的行数控制这个属性不是万能胶。6. 导出 PDF 前的最后一步打印样式与自查习惯主题做得再漂亮最终交付物是 PDF。打印样式是整个主题里优先级最高、也最容易漏写的部分。把前面几章的规则在打印媒体下再确认一遍然后养成分段验证的习惯。page { size: A4; margin: 2.54cm 3.17cm; /* 上下与左右近似 Word 默认版心 */ } media print { #write { font-family: Times New Roman, Source Han Serif SC, SimSun, Songti SC, serif; font-size: 12pt; line-height: 1.6; } #write p { text-indent: 2em; margin: 0; /* 论文式分段缩进代替段间空行 */ } #write pre { white-space: pre-wrap; /* 长代码行自动换行避免溢出页边距 */ } #write tr { break-inside: avoid; } }这套打印样式的设计逻辑是预览时 16px 保障屏幕可读打印时 12pt 符合正文标准margin: 0配合首行缩进完成分段这是中文学术最常见的版式代码块允许折行因为 PDF 里横向滚动不存在溢出只能被裁掉。全部规则集中在media print里和屏幕样式解耦以后调预览不用怕影响导出。导出前按下面这个清单过一遍30 秒足够字体和缩进、表格线、代码换行、页边距、分页位置。 | 检查项 | 方法 | 正常表现 | | --- | --- | --- | | 字体 | 导出 PDF 后用阅读器选中正文看字体属性 | 中文为宋体类英文为 Times 类 | | 首行缩进 | 看任意正文段落第一行 | 缩进两字宽段间无多余空行 | | 三线表 | 目测表格边框 | 仅顶线、表头下线、底线三条黑线 | | 代码块 | 看长行是否超出页边 | 长行自动换行右侧无裁切 | | 分页 | 检查表格行是否被切断 | 同一行数据完整出现在一页内 |我最后一次在这上面翻车是给某次课程报告导出 60 页 PDF预览一切正常导完发现正文字体被打印样式回退成了默认黑体整本读起来像 PPT 文字稿。后来养成两个习惯一是所有字体栈在media print里再写一遍不依赖屏幕样式的继承二是每次只导出前 3 页样张确认再导全文而不是等 60 页出来后才开始查问题。主题文件我会固定在:root变量区留一排注释记录每个变量改了什么、为什么改。否则三个月后想调个字号看着一屏写死的font-size数值根本想不起当初哪些是配套的。把变量集中、把打印样式独立、把自查变成习惯这个主题才真正算你的工具而不是一次性的临时皮肤。希望帮到你。本文还有配套的精品资源点击获取