引用块
引用块用行首的 > 标记,用来承载「这段话不是我说,是引自别处」的内容:原文摘录、上游文档的说明、审阅者的意见。它在页面上通常带一条左侧竖线或者浅色底纹,和正文区分开。但引用块的真正难点在于范围——它从哪一行开始,到哪一行结束?中间的换行、空行和其他块级语法又怎么处理?这一页把这些问题一次讲清。
行首写一个 >,后面跟空格和内容:
> 这是一个引用
>
> - 引用中的列表
> - 第二项
>
>> 嵌套引用
<blockquote>
<p>这是一个引用</p>
<ul>
<li>
<p>引用中的列表</p>
</li>
<li>
<p>第二项</p>
</li>
</ul>
<blockquote>
<p>嵌套引用</p>
</blockquote>
</blockquote>
每一条被引用的行都要以 > 开头——包括空行,空行写成只有 > 的一行,它负责把引用块里的段落隔开。引用块可以打断前面的普通段落,但必须另起一行:
这一句在正文里。
> 这一句在引用里。
<p>这一句在正文里。</p>
<blockquote>
<p>这一句在引用里。</p>
</blockquote>
引用块的范围
引用块从第一个 > 开始,到第一个不以 > 开头的行结束。它会吃掉后面所有连续的 > 行,不管中间隔了多少空行——空行如果也写成 >,引用就继续。
还有一条容易被忽略的规则:懒延续。引用块里的第一行是段落时,后面没写 > 的普通文字行会被并入这个段落:
> 这是引用的第一段
这一行没有 >,但仍然属于引用
<blockquote>
<p>这是引用的第一段
这一行没有 >,但仍然属于引用</p>
</blockquote>
这条规则让长段落可以写得舒展一些,但也意味着引用块的结束位置可能比你以为的更靠后。
引用块里能放什么
引用块不是只能装纯文本,它内部遵循和其他块级结构一样的规则:列表、代码块、嵌套引用都能放进去。唯一要记住的是每一行都要加前缀——放列表就得写成 > - 项目,放代码块就得每行都写 > 。
嵌套引用用两层 > 表示,层数不限:
>> 两层引用
>>> 三层引用
| 写法 | 实际渲染 | 原因 |
|---|---|---|
> 引用 | 引用块 | 基本写法 |
>引用 | 引用块 | > 后的空格可省 |
> 单独一行 | 引用里的段落分隔 | 空引用行用来隔段 |
引用中间漏了 > | 该行并入引用 | 懒延续 |
引用块里的列表漏了 > | 列表跳出引用 | 每一行都要带前缀 |
引用块的结束位置比想象中靠后。 漏掉一个 >,本该是正文的一行会被并进引用,看起来就像「引用吞掉了我的正文」。写长引用时,可以先想清楚它一共有几行,再逐行加前缀,比边写边补稳妥得多。
把下面这段内容改写成 Markdown,要求:前三行是同一个引用块里的两段话,用空的引用行隔开;第四行开始是普通正文,不要被引用吞掉;再补一个嵌套一层的引用。
这一行是正文。
> 引用里的第一段。
> 引用里的第一段第二行。
>
> 引用里的第二段。
这一行应该还是正文。
> 外层引用
>> 内层引用
解题思路:
引用块从第一个 > 开始,遇到不以 > 开头的行才结束。所以「这一行应该还是正文」虽然紧跟在引用后面,但只要它不带 >,就会结束引用块——这正是懒延续规则的体现:只有当引用块里的第一行是段落时,后面的普通行才会被并进去。
详细步骤:
- 引用块里的每个段落都要以
>开头。第一段有两行,两行都要写>。 - 段落之间用一个只含
>的空引用行隔开,它在渲染时表现为引用块内部的段落间距。 - 「这一行应该还是正文」不带
>,引用块在这里结束,它渲染成普通段落。 - 嵌套引用用两层
>:外层一行> 外层引用,内层一行>> 内层引用。 - 检验:渲染后是三块内容——一段正文、一个含两段的引用块、一段正文,最后是嵌套引用。
最终答案:
这一行是正文。
> 引用里的第一段。
> 引用里的第一段第二行。
>
> 引用里的第二段。
这一行应该还是正文。
> 外层引用
>
>> 内层引用读完这一页,你应当能写出引用块并用空引用行在内部分段,能解释引用块的范围为什么由「第一个不带 > 的行」决定,能用多层 > 表达嵌套,也能在「正文被吞进引用」时立刻想到检查前缀漏没漏。接下来引用别人的话时,你会既把格式排得整齐,也守住正文和引用的边界。
