Markdown 复杂语法实验场
用一篇真实文章验证 Typora 常用语法、数学公式、Mermaid、脚注、表格与原生 HTML。
这篇文章不是功能清单,而是一份可以长期保留的渲染验收样本。我会在 Typora 中常用的语法和网页输出之间建立一条可重复验证的路径。
写作格式的价值,不在于语法多,而在于文件离开编辑器之后仍能完整表达。
1基础排版与 GFM
实现掩码(Masking)操作,引入多头注意力(Multi-Head Attention)机制;前(中文括号)后也能正常加粗。
新的向量知道前面有 Your journey,后面有 with one step,高亮应连续。
一段文字可以同时包含粗体、斜体、删除线、inline code 和 外部链接。
- 第一层列表
- 第二层列表
- 第三层列表
- 第二层列表
- 列表之后仍然保持稳定的段落节奏
- 写作
- 本地预览
- 发布与验证
- 标题、引用、列表和代码
- 表格、删除线与任务列表
- 数学公式与 Mermaid
- 用新的真实文章继续回归测试
| 能力 | 写法 | 网页表现 |
|---|---|---|
| GFM | remark-gfm | 已验证 |
| 数学公式 | $...$ / $$...$$ | KaTeX |
| 图表 | Mermaid fenced code | SVG |
2语义警告框
提醒
普通补充信息会显示为「提醒」。
建议
推荐做法会显示为「建议」。
重要
读者不能漏掉的要点会显示为「重要」。
警告
需要关注的风险会显示为「警告」。
注意
可能造成严重后果的操作会显示为「注意」。
3链接卡片
在链接后面紧跟 {card},网页里会多出一张卡片,写着对方页面的标题、简介和配图。链接写在句子里时,文字照常可点,卡片跟在这一段后面:表格、任务列表和脚注都来自 remark-gfm,它让 GFM 语法在这里生效。
链接单独占一行时,卡片就放在这一行的位置:
写在代码里的 [文字](https://example.com){card} 不会变成卡片,原样显示。
3.1标题里的 Typora 外链
标题本身点了会定位到这里,不带下划线;标题里的外链照常带虚线下划线。
4数学公式
求和部分:(上下限)。
行内公式会和文字一起流动,例如注意力的缩放项 。
块级公式支持多行对齐:
矩阵也能正常显示:
5Mermaid 流程与时序
所有 Mermaid 图表固定使用「中性」主题。每张图都可以在「图表」与「Code」之间切换:前者用于阅读,后者用于检查或复制原始 Mermaid 语法。
下面的流程图描述本地写作到发布的闭环:
flowchart LR
A[Typora 写作] --> B{本地验证}
B -->|通过| C[生成内容索引]
B -->|失败| A
C --> D[构建网站]
D --> E[浏览器验收]
E --> F[发布]
同一篇文章里可以继续放更复杂的时序图:
sequenceDiagram
autonumber
participant W as Writer
participant M as Markdown
participant S as Site
participant R as Reader
W->>M: 保存 .md 与媒体
M->>S: 构建内容与目录
S-->>W: 返回预览
W->>S: 发布已验证版本
R->>S: 阅读文章
S-->>R: HTML + KaTeX + Mermaid
6多语言代码高亮
同一种内容结构,在不同语言里应该保留各自可辨识的关键字、类型、字符串、注释与数字层级。
6.1TypeScript
type Post<TMeta extends Record<string, unknown>> = {
slug: string;
meta: TMeta;
};
async function publish<TMeta extends Record<string, unknown>>(
post: Post<TMeta>,
): Promise<string> {
const response = await fetch(`/api/posts/${post.slug}`, {
method: "POST",
body: JSON.stringify(post.meta),
});
return response.ok ? "published" : "failed";
}
6.2Python
from dataclasses import dataclass
from pathlib import Path
@dataclass(frozen=True)
class Article:
"""选中这行文字时,深浅主题都应保持清晰。"""
title: str
source: Path
def published_titles(articles: list[Article]) -> list[str]:
return [article.title for article in articles if article.source.exists()]
6.3Rust
#[derive(Debug)]
struct Entry<'a> {
title: &'a str,
pinned: bool,
}
fn pinned_titles(entries: &[Entry<'_>]) -> Vec<&str> {
entries.iter()
.filter(|entry| entry.pinned)
.map(|entry| entry.title)
.collect()
}
6.4Go
func renderAll(ctx context.Context, slugs []string) <-chan Result {
results := make(chan Result)
go func() {
defer close(results)
for _, slug := range slugs {
results <- render(ctx, slug)
}
}()
return results
}
6.5SQL
WITH ranked_posts AS (
SELECT
title,
topic,
ROW_NUMBER() OVER (PARTITION BY topic ORDER BY published_at DESC) AS rank
FROM posts
WHERE status = 'published'
)
SELECT title, topic
FROM ranked_posts
WHERE rank <= 3;
6.6Swift
actor ReadingProgress {
private var offsets: [URL: Double] = [:]
func save(_ offset: Double, for article: URL) {
offsets[article] = max(0, offset)
}
func restore(for article: URL) -> Double {
offsets[article, default: 0]
}
}
6.7C#
public record Article(string Title, DateOnly Published);
public static class Archive
{
public static IEnumerable<string> Titles(IEnumerable<Article> articles) =>
articles.OrderByDescending(a => a.Published).Select(a => a.Title);
}
6.8C++
#include <string>
#include <vector>
struct Article {
std::string title;
int words;
};
int totalWords(const std::vector<Article>& articles) {
int total = 0;
for (const auto& article : articles) total += article.words;
return total;
}
6.9Shell
npx garden check && npm run build
for file in content/posts/*.md; do
wc -m "$file"
done
7Diff、图片与原生 HTML
- const publishing = "copy and paste";
+ const publishing = "content as source";
展开原生 HTML 内容
Typora 文件中的 details / summary 会保留为可交互的折叠区域。
静态 HTML 块
程序化:结构化、强状态、可以穷举的场景。
大模型: 非结构化、需要理解语境的场景。
最后用一个脚注说明这篇文章的角色:它既是示例,也是未来升级 Markdown 依赖时的回归测试。1
8Footnotes
-
页面构建测试会检查公式与示例内容,浏览器验收会检查 Mermaid 是否被转换为 SVG。 ↩
参考
- CommonMark Spec spec.commonmark.org
- GitHub Flavored Markdown Spec github.github.com
- Typora 支持的 Markdown 语法 support.typora.io
- KaTeX 支持的函数 katex.org
- Mermaid 文档 mermaid.js.org
- 《The Elements of Typographic Style》
来自开放网络的回应
引用、喜欢、转发和站外回复会通过 Webmention 回到这里。
正在读取开放网络回应…


评论
评论还没开放。配好下面四项后,这里才会出现评论框。
打开 Giscus,安装到一个已开启 Discussions 的公开仓库,把仓库、仓库 ID、分类、分类 ID 写入
.env.local和 GitHub Actions Variables:GISCUS_REPO、GISCUS_REPO_ID、GISCUS_CATEGORY、GISCUS_CATEGORY_ID。