你可以添加行内代码片段或代码块。代码块支持用于语法高亮、title、行高亮、icon 等的元选项,以及更多功能。
要将 word
或 phrase
表示为代码,请用反引号(`)包裹。
要将 ` 单词 ` 或 ` 短语 ` 标记为代码,请用反引号(`)将其包围。
使用围栏代码块 ,即用三个反引号将代码包裹起来。代码块支持复制;如果启用了 AI 助手,用户还可以让 AI 解释代码。
为实现语法高亮并启用元选项,请指定编程语言。在语言标识后添加任意元选项,例如 title 或 icon。
class HelloWorld {
public static void main ( String [] args ) {
System . out . println ( "你好,世界!" );
}
}
``` java HelloWorld.java lines icon="java"
class HelloWorld {
public static void main ( String [] args ) {
System . out . println ( "你好,世界!" );
}
}
```
你可以为代码块添加元选项,以自定义其显示效果。
在添加任何其他元选项之前,必须先为代码块指定编程语言。
字符串与布尔选项 :可用 ""
、''
,或不加引号包裹。
表达式选项 :可用 {}
、""
,或 ''
包裹。
在代码块的起始反引号后添加编程语言即可启用语法高亮。
我们使用 Shiki 提供语法高亮,支持其所有可用语言。完整语言列表见 Shiki 文档中的语言 。
在 docs.json
中通过 styling.codeblocks
全局自定义代码块主题。可以设置如 system
或 dark
等简单主题,或为浅色与深色模式配置自定义的 Shiki 主题 。详见 Settings 获取详细的配置选项。
class HelloWorld {
public static void main ( String [] args ) {
System . out . println ( "你好,世界!" );
}
}
``` java
class HelloWorld {
public static void main ( String [] args ) {
System . out . println ( "你好,世界!" );
}
}
```
为代码示例添加标题。使用 title="Your title"
,或在单独一行提供一个字符串。
``` javascript 代码块示例
const hello = "world" ;
```
使用 icon
属性为代码块添加图标。参见图标 以查看所有可用选项。
``` javascript icon="square-js"
const hello = "world" ;
```
在代码块中使用 highlight
并指定要高亮的行号或范围,以突出显示特定行。
Line Highlighting Example
const greeting = "你好,世界!" ;
function sayHello () {
console . log ( greeting );
}
sayHello ();
``` javascript 行高亮示例 highlight={1-2,5}
const greeting = "Hello, World!" ;
function sayHello () {
console . log ( greeting );
}
sayHello ();
```
在代码块中可使用带有行号或范围的 focus
来高亮指定行。
const greeting = "你好,世界!" ;
function sayHello () {
console . log ( greeting );
}
sayHello ();
``` javascript 行聚焦示例 focus={2,4-5}
const greeting = "Hello, World!" ;
function sayHello () {
console . log ( greeting );
}
sayHello ();
```
使用 lines
在代码块左侧显示行号。
Show Line Numbers Example
const greeting = "你好,世界!" ;
function sayHello () {
console . log ( greeting );
}
sayHello ();
``` javascript 显示行号 示例行
const greeting = "Hello, World!" ;
function sayHello () {
console . log ( greeting );
}
sayHello ();
```
使用 expandable
让用户展开或折叠较长的代码块。
from datetime import datetime, timedelta
from typing import Dict, List, Optional
from dataclasses import dataclass
@dataclass
class Book :
title: str
author: str
isbn: str
checked_out: bool = False
due_date: Optional[datetime] = None
class Library :
def __init__ ( self ):
self .books: Dict[ str , Book] = {}
self .checkouts: Dict[ str , List[ str ]] = {} # 借阅者 -> ISBN列表
def add_book ( self , book : Book) -> None :
if book.isbn in self .books:
raise ValueError ( f "ISBN为 { book.isbn } 的图书已存在" )
self .books[book.isbn] = book
def checkout_book ( self , isbn : str , patron : str , days : int = 14 ) -> None :
if patron not in self .checkouts:
self .checkouts[patron] = []
book = self .books.get(isbn)
if not book:
raise ValueError ( "未找到图书" )
if book.checked_out:
raise ValueError ( "图书已被借出" )
if len ( self .checkouts[patron]) >= 3 :
raise ValueError ( "借阅者已达到借阅限制" )
book.checked_out = True
book.due_date = datetime.now() + timedelta( days = days)
self .checkouts[patron].append(isbn)
def return_book ( self , isbn : str ) -> float :
book = self .books.get(isbn)
if not book or not book.checked_out:
raise ValueError ( "未找到图书或图书未被借出" )
late_fee = 0.0
if datetime.now() > book.due_date:
days_late = (datetime.now() - book.due_date).days
late_fee = days_late * 0.50
book.checked_out = False
book.due_date = None
# 从借阅者的借阅记录中移除
for patron, books in self .checkouts.items():
if isbn in books:
books.remove(isbn)
break
return late_fee
def search ( self , query : str ) -> List[Book]:
query = query.lower()
return [
book for book in self .books.values()
if query in book.title.lower() or query in book.author.lower()
]
def main ():
library = Library()
# 添加一些图书
books = [
Book( "The Hobbit" , "J.R.R. Tolkien" , "978-0-261-10295-4" ),
Book( "1984" , "George Orwell" , "978-0-452-28423-4" ),
]
for book in books:
library.add_book(book)
# 借阅和归还示例
library.checkout_book( "978-0-261-10295-4" , "patron123" )
late_fee = library.return_book( "978-0-261-10295-4" )
print ( f "滞纳金: $ { late_fee :.2f} " )
if __name__ == "__main__" :
main()
See all 87 lines
``` python 可展开示例 expandable
from datetime import datetime, timedelta
from typing import Dict, List, Optional
from dataclasses import dataclass
# ...
if __name__ == "__main__" :
main()
```
使用 wrap
为长行启用自动换行。这样可以防止横向滚动,并使长行更易读。
const greeting = "你好,世界!我是一行很长的文本,会换行到下一行。" ;
function sayHello () {
console . log ( greeting );
}
sayHello ();
``` javascript 换行示例 wrap
const greeting = "Hello, World! I am a long line of text that will wrap to the next line." ;
function sayHello () {
console . log ( greeting );
}
sayHello ();
```
在代码块中可视化展示新增或删除的行。新增行以绿色高亮,删除行以红色高亮。
要创建差异视图,请在代码块的行尾添加以下特殊注释:
// [!code ++]
:将该行标记为新增(绿色高亮)。
// [!code --]
:将该行标记为删除(红色高亮)。
对多行连续内容,可在冒号后指定行数:
// [!code ++:3]
:将当前行及其后两行标记为新增。
// [!code --:5]
:将当前行及其后四行标记为删除。
注释语法必须与所使用的编程语言一致(例如,JavaScript 使用 //
,Python 使用 #
)。
const greeting = "你好,世界!" ;
function sayHello () {
console . log ( "你好,世界!" );
console . log ( greeting );
}
sayHello ();
```js Diff 示例 icon="code" lines
const greeting = "Hello, World!"; // [!code ++]
function sayHello() {
console.log("Hello, World!"); // [!code --]
console.log(greeting); // [!code ++]
}
sayHello();
```