> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/zh-cn/te-ding-ling-yu/05-chess-notation.md).

# 国际象棋记谱法

## 引言

本文将介绍国际象棋排版的基础知识，包括 [一些国际象棋惯例的简短回顾/总结](#chess-conventions-a-brief-review) 这些内容你可能会在 LaTeX 国际象棋宏包文档中遇到。不需要这些入门材料的读者可以直接跳到 [LaTeX 宏包示例](#a-first-example-with-the-xskak-package).

## 一款宏包，统管一切

CTAN 仓库列出了许多 [与国际象棋相关的宏包](https://ctan.org/search?phrase=chess\&ext=false&_PKG=\&PKG=on&_AUTHORS=\&AUTHORS=on&_TOPICS=\&TOPICS=on&_FILES=&_PORTAL=\&PORTAL=on\&wildcard=on\&max=32)，因此你可能会想选择哪一个？本文使用 [`xskak` 宏包](https://ctan.org/pkg/xskak?lang=en)，由于其功能丰富、配置选项广泛且文档优秀，非常推荐用于国际象棋排版。 `xskak` 加载并扩展了原始的 [`skak` 宏包](https://ctan.org/pkg/skak?lang=en) ，同时还加载了 [`chessboard` 宏包](https://ctan.org/pkg/chessboard?lang=en) ，它提供了大量选项来配置和创建棋盘。

本文提供的示例不能替代 *优秀的* 随这些宏包附带的文档，我们强烈建议你浏览、阅读并探索，因为两套文档都包含大量非常有帮助的示例。 [`xskak`](https://texdoc.org/serve/xskak/0) 和 [`chessboard`](https://texdoc.org/serve/chessboard/0) 宏包文档

**注意**：二者都 `skak` 和 `xskak` 可以解析并排版（其子集中的） [可移植棋谱记号（PGN）](#portable-game-notation). `xskak` 扩展了 `skak`.

**趣闻**：skak 是丹麦语中“国际象棋”的意思。

### 一些说明

以下是 `xskak` 文档中提到的一些要点：

> `xskak` 将加载宏包 `skak` ，不带选项（也不会把选项传递给它）。因此，如果你想带选项加载 `skak` ，你必须在加载宏包之前这样做 `xskak`.

> `xskak` 是对 **的扩展（而不是替代），主要工作仍由宏包 `skak`**&#x5B8C;成……请先阅读宏包 `skak`...

* **注意**在与国际象棋相关的宏包中 [列出的](https://ctan.org/search?phrase=chess\&ext=false&_PKG=\&PKG=on&_AUTHORS=\&AUTHORS=on&_TOPICS=\&TOPICS=on&_FILES=&_PORTAL=\&PORTAL=on\&wildcard=on\&max=32) 有一个叫做 [`skaknew`](https://ctan.org/pkg/skaknew)。尽管名字如此， `skaknew` 该宏包是 *不* 原始 `skak` 宏包的全新或增强版本：它是一套 Type 1 国际象棋字体。 `xskak` 该宏包利用了 `skaknew` 这些字体，因此你无需在项目中手动加载它们。

### 最小 xskak 示例

为了“先设定场景”，并且不作进一步解释，这里给出一个最小的 `xskak` 宏包示例，它排版了两个棋盘：一个为空，另一个包含所有棋子并处于初始位置：

```latex
\documentclass{article}
% 注意：你只需要加载 xskak，
% 不需要加载 skak 或 chessboard 宏包。
\usepackage{xskak}
\begin{document}
% 这个 \chessboard 命令绘制
% 一个空棋盘：选项
% showmover=false 将在
% 本文后面讨论
\chessboard[showmover=false]
% \newchessgame 命令
% 初始化一个新对局：
\newchessgame
% 因为初始化了一个新对局，
% \chessboard 现在绘制一个
% 带有棋子的棋盘：
\chessboard
第二个棋盘右侧的小白方正方形称为 \textit{mover}。
\end{document}
```

[在 Overleaf 中打开此示例](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=A+basic+xskak+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Note%3A+you+only+need+to+load+xskak%2C%0A%25+not+the+skak+or+chessboard+packages.%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%25+This+%5Cchessboard+command+draws+%0A%25+an+empty+chess+board%3A+the+option%0A%25+showmover%3Dfalse+will+be+discussed%0A%25+later+in+the+article%0A%5Cchessboard%5Bshowmover%3Dfalse%5D%0A%25+The+%5Cnewchessgame+command+%0A%25+initializes+a+new+game%3A%0A%5Cnewchessgame%0A%25+Because+a+new+game+was+initialized%2C+%0A%25+%5Cchessboard+now+draws+a+%0A%25+board+with+chess+pieces%3A%0A%5Cchessboard%0AThe+small+white+square+to+the+right+of+the+second+board+is+called+the+%5Ctextit%7Bmover%7D.%0A%5Cend%7Bdocument%7D)

这 `xskak` 示例产生以下输出：

![](/files/c97f424d149fd0df9e6a84b072a2cd7025eb6ad8)

## 国际象棋惯例：简要回顾

为了帮助刚接触国际象棋、尤其是其排版的读者，以下几节提供 *简要* 介绍，这些主题和惯例你会在 LaTeX 国际象棋宏包及其附带文档中遇到。熟悉国际象棋惯例的读者可以跳过这些部分，直接进入 LaTeX 示例。

### 可移植棋谱记号

skak 和 xskak 宏包支持 [可移植棋谱记号](https://en.wikipedia.org/wiki/Portable_Game_Notation) （PGN）的一部分，这一标准大约于 1994 年由 [Steven Edwards](https://www.chessprogramming.org/Steven_Edwards)发明。1994 年的原始 PGN 规范可 [在 archive.org 上获取](https://archive.org/details/pgn-standard-1994-03-12)。标准的直接链接是 <https://tim-mann.org/Standard>.

根据 [PGN 标准文本](https://tim-mann.org/Standard):

> ，PGN 即“Portable Game Notation”，是一种使用 ASCII 文本文件表示国际象棋棋局数据的标准。PGN 的结构便于人类用户阅读和编写，也便于计算机程序解析和生成……PGN 被提议作为数据交换的通用可移植表示形式。

请注意，PGN 文件是为 *交换 **棋局** 数据*而设计的；也就是说，PGN 文件旨在包含 *完整棋局* 信息——例如对局者姓名、赛事/日期等细节，以及棋局中 *所有着法* 的代数记谱记录。

**注意**：关于 PGN 的另一个简短介绍可访问 <http://www.enpassant.dk/chess/palview/p3manual/p3pgn.htm>

### 棋盘的横排与纵列

棋盘是一个 8×8 的方格网，通常可以描述为 8 条水平行和 8 条垂直列；不过，描述棋盘时使用了不同的术语：

* 有 8 条水平 ***横排*** （而不是行）
* 有 8 条垂直 ***文件的项目*** 纵列（而不是列）

棋盘上的每个方格都可以使用 [若干惯例](https://en.wikipedia.org/wiki/Chessboard#Board_notation) 但 [代数记谱法](https://en.wikipedia.org/wiki/Algebraic_notation_\(chess\)) （坐标系统）来标识，这是公认的国际标准。

### 代数记谱法

在代数记谱体系中，横排和纵列的标记如下：

* 8 条水平 ***横排*** 用数字标记 `1` 更改为 `8`
* 8 条垂直 ***文件的项目*** 用字母标记 `a` 更改为 `h`.

下图显示了一个棋盘，文件和横排使用代数记谱标签：

![](/files/aa4d2deaf62432dbc48780d5ba8d1a73848dc10a)

棋盘上的每个方格都位于某一特定纵列（列）和横排（行）的交点：相应的纵列和横排值可用作坐标，唯一标识每个方格，以描述棋子的所在位置和移动。

举例来说，下图显示了位于 **e7** 的方格，随后是第二个棋盘，列出了全部 64 个方格的位置：

![](/files/1dc45896973a881e438e1f66be1ead328130537f)

如果你是国际象棋新手，维基百科页面 [代数记谱法](https://en.wikipedia.org/wiki/Algebraic_notation_\(chess\)) 包含一些有用的背景信息，其中一些我们在下文中做了总结。

### 棋子记号

每一种棋子类型，通常兵除外，都会用一个大写字母表示，这个字母会因所用语言而异。说英语的棋手使用以下字母：

| 字母 | 棋子 |
| -- | -- |
| K  | 王  |
| Q  | 后  |
| R  | R  |
| 车  | B  |
| N  | 马  |

在标准代数记谱中，兵并不 *通常* 用大写字母表示；相反，它们可以通过 *缺少* 大写字母来识别。不过，这一惯例并不总是采用；可以用大写字母 P 表示兵。在 [Forsyth-Edwards 记谱法（FEN）](#forsyth-edwards-notation-fen) 中，大写和小写字母都用于表示棋子。

### 单步着法记号

要记录一枚棋子的移动，你需要标识棋子及其目标格。可以通过使用棋子的大写字母加上目标格坐标来实现。

**注意**：在描述兵的走法时，用来表示该棋子是兵的字母并不 *通常* 使用；只给出目标格，如下面示例所示： *通常* 非兵

* *着法：* Be5
  * **象走到格**: **车**e5 **Nf3**
  * **：马**走到**N**f3 **兵**
* *c5* Be5
  * **：一个兵走到格**：在某些情况下（例如某些 LaTeX 命令），兵 **：一个兵走到格**
  * **注意**会被标识 *为大写字母* ；因此 **P**可能写成 **：一个兵走到格** Pc5 **三个点（...）黑方着法指示**.

#### 《可移植棋谱记号》标准的

可移植棋谱记号标准 [可移植棋谱记号标准](https://tim-mann.org/Standard) 解释了在着法编号后使用三个点（...）的用法（例如， **3...e6**):

> 白方着法编号由给出整步编号的整数后加一个句点构成。黑方着法编号由给出整步编号的整数后加 ***三个句点字符***.

### 一系列着法的惯例

正如维基百科关于 [代数记谱法](https://en.wikipedia.org/wiki/Algebraic_notation_\(chess\)#Formatting)的文章所解释的，要描述一系列着法：

* 每一步单独的着法 *通常* 会对非兵棋子使用大写字母，不过如上所述，在某些情况下（惯例中）可以用大写字母 P 表示兵的走法。
* 一系列国际象棋着法是 `<白方棋子着法> <黑方棋子着法>` 对的序列——注意每一对着法都有编号（见下例）

### 其他国际象棋记谱：FAN 和 FEN

#### 图形代数记谱法（FAN）

用于表示棋子的、因语言而异的字母，通常会被国际通用的棋子符号所替代。这种符号表示法称为图形代数记谱法，或 FAN。例如，符号 ♞（或 ♘）可以代替 N（代表马）。

Unicode 规范将国际象棋字符编码在 [杂项符号集](https://www.unicode.org/charts/PDF/U2600.pdf)中。下表列出了每个国际象棋字符的 Unicode 值、名称和代表符号——用于显示国际象棋符号的实际字形（字符设计）将取决于你设备/浏览器的字体设置。

| <p>代表符号<br>（字形）</p> | <p>Unicode 值<br>（十六进制）</p> | <p>Unicode 字符名称<br>（正式）</p> |
| ------------------- | -------------------------- | --------------------------- |
| ♔                   | 2654                       | 白色国际象棋王                     |
| ♕                   | 2655                       | 白色国际象棋后                     |
| ♖                   | 2656                       | 白色国际象棋车                     |
| ♗                   | 2657                       | 白色国际象棋象                     |
| ♘                   | 2658                       | 白色国际象棋马                     |
| ♙                   | 2659                       | 白色国际象棋兵                     |
| ♚                   | 265A                       | 黑色国际象棋王                     |
| ♛                   | 265B                       | 黑色国际象棋后                     |
| ♜                   | 265C                       | 黑色国际象棋车                     |
| ♝                   | 265D                       | 黑色国际象棋象                     |
| ♞                   | 265E                       | 黑色国际象棋马                     |
| ♟                   | 265F                       | 黑色国际象棋兵                     |

#### Forsyth-Edwards 记谱法（FEN）

如前所述，PGN 用于存储和交换 *整盘棋局*，包括该局中所下的所有着法。相比之下， [Forsyth-Edwards 记谱法（FEN）](https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation) 提供了某一时刻棋局的快照。FEN 记谱法使用大写和小写字母来表示棋子：

* 白方棋子用大写字母表示（PNBRQK）
* 黑方棋子用小写字母表示（pnbrqk）

其中 P 表示白兵，p 表示黑兵。

关于 FEN 的详细讨论，以及它与 PGN 的比较，不在本文范围之内。想更好理解 PGN 与 FEN 之间差异的读者，也许可以看看下面的视频：

{% embed url="<https://www.youtube.com/embed/3PvmsmqKF_I>" %}

## 使用 xskak 宏包的第一个示例

### 走出你的着法

要随着对局推进排版棋步，你使用命令 `\mainline{*着法列表*}` 其中 `*着法列表*` 以 [国际象棋代数记谱法](#algebraic-notation)表示。我们将演示对以下着法序列进行排版：

1. **e4 e5**：白兵走到 **e4**，黑兵走到 **Nf3**
2. **Nf3 Nc6**：白马**N**走到 **兵**，黑马**N**走到 **c6**
3. **Bb5 a6**：白方 **车**象走到 **b5**，黑兵走到 **a6**

这组着法可以写成 [`xskak` 宏包](https://ctan.org/pkg/xskak?lang=en) 命令 `\mainline{1.e4 e5 2.Nf3 Nc6 3.Bb5 a6}`——注意每一对着法都有编号（例如， `**1.**e4 e5`):

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame
\mainline{1.e4 e5 2.Nf3 Nc6 3.Bb5 a6}
\showboard % 这是 skak 宏包命令。后续示例将使用 \chessboard[...]
\end{document}
```

[在 Overleaf 中打开此示例](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=First+xskak+package+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewchessgame%0A%5Cmainline%7B1.e4+e5+2.Nf3+Nc6+3.Bb5+a6%7D%0A%5Cshowboard+%25+A+skak+package+command.+Future+examples+will+use+%5Cchessboard%5B...%5D%0A%5Cend%7Bdocument%7D)

这 `xskak` 示例产生以下输出：

![](/files/7911d9911f903207c27118a3da2d43f4023b4062)

使用以下命令：

* **`\newchessgame[〈key=value 列表〉]`**：开始一个新对局并初始化棋盘。 `[〈key=value 列表〉]` 是可选的，因此你也可以写成 `\newchessgame` 并依赖默认的棋盘设置。可选键的集合列在 [`xskak` 文档](https://texdoc.org/serve/xskak/0).
* **`\mainline{〈国际象棋着法列表〉}`**：处理 `〈国际象棋着法列表〉` 并更新棋盘，使得 `\showboard` （或者 `\chessboard`）将输出当前棋盘状态。
* **`\showboard`**：排版棋盘。 `\showboard` 该命令来源于底层的 `skak` 宏包， `xskak` 它 [`chessboard` 宏包](https://ctan.org/pkg/chessboard?lang=en)由 `xskak`加载，提供了非常灵活的 **`\chessboard[〈key=value 列表〉]`** 命令，而 `xskak` 宏包为其添加了额外的键。由于 `\chessboard[...]` 旨在取代 `\showboard`，本文后续示例将只使用 `\chessboard[...]` 命令。

### 介绍 \chessboard 命令

命令 **`\chessboard[〈key=value 列表〉]`**：使用可选的 `〈key=value 列表〉`排版棋盘。 `键` 可用的集合是 *广泛*，为棋盘的大小、内容、布局、设计、注释等提供了极大的控制。我们鼓励读者阅读 [`chessboard` （PDF）](https://texdoc.org/serve/chessboard/0) 和 [`xskak` （PDF）](https://texdoc.org/serve/xskak/0)和*许多* 的优秀宏包文档，它们都包含许多有帮助的示例——

因为这些键是可选的，所以你可以写成 `\chessboard` ，它使用宏包默认值来排版棋盘；例如，下面的代码使用 `\chessboard` 不带任何选项。后面用 Inkscape 手动添加的进一步注释显示了 *mover* （此处为方块），它默认被排版：

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame
\mainline{1.e4 e5 2.Nf3 Nc6 3.Bb5}
\chessboard % 而不是 \showboard

\newchessgame
\mainline{1.e4 e5 2.Nf3 Nc6 3.Bb5 a6}
\chessboard % 而不是 \showboard
\end{document}
```

[在 Overleaf 中打开此示例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=chessboard+command+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewchessgame%0A%5Cmainline%7B1.e4+e5+2.Nf3+Nc6+3.Bb5%7D%0A%5Cchessboard+%25+instead+of+%5Cshowboard%0A%0A%5Cnewchessgame%0A%5Cmainline%7B1.e4+e5+2.Nf3+Nc6+3.Bb5+a6%7D%0A%5Cchessboard+%25+instead+of+%5Cshowboard%0A%5Cend%7Bdocument%7D)

上图展示了上面代码生成的两个棋盘，两者都使用 `\chessboard`:

![](/files/df3858dcfd1946d49fd57a7ca2e8ee64907bef9e)

毫不意外，提供了多种键来控制 mover，包括显示或隐藏它；例如，要隐藏 mover，你可以使用 `showmover` 键，值设为 `false`:

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame
\mainline{1.e4 e5 2.Nf3 Nc6 3.Bb5 a6}\par
\chessboard[showmover=false] % 隐藏 mover
\end{document}
```

[在 Overleaf 中打开此示例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Hiding+the+chessboard+mover\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewchessgame%0A%5Cmainline%7B1.e4+e5+2.Nf3+Nc6+3.Bb5+a6%7D%5Cpar%0A%5Cchessboard%5Bshowmover%3Dfalse%5D+%25+Hide+the+mover%0A%5Cend%7Bdocument%7D)

此示例产生如下输出——一个没有 mover 的棋盘：

![](/files/2a77787c1e9f70e283f389c04766b6b0a47748bc)

该 [`chessboard` 宏包文档（PDF）](https://texdoc.org/serve/chessboard/0) 提供了一份用于自定义 mover 的键列表，并附有如何设计你自己的 mover 的说明！

## 更多 xskak 示例

### 文本注释

PGN 规范支持使用大括号将注释文本括起来来做注释： `{〈文本〉}`；不过， `xskak` 宏包更倾向于将文本注释写成 `\xskakcomment{〈文本〉}`，如下例所示：

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame %开始一个新的国际象棋对局
\mainline{1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 \xskakcomment{ 这是一个注释。 }}\vspace{3mm}

\chessboard
\end{document}
```

[在 Overleaf 中打开此示例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=xskak+chess+comment+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewchessgame+%25Start+a+new+chess+game%0A%5Cmainline%7B1.e4+e5+2.Nf3+Nc6+3.Bb5+a6+%5Cxskakcomment%7B+This+is+a+comment.+%7D%7D%5Cvspace%7B3mm%7D%0A%0A%5Cchessboard%0A%5Cend%7Bdocument%7D)

此示例生成以下输出：

![](/files/953f5f9a3d84689f36e474051eda1ef79e94802f)

### 使用 FEN 记谱法初始化棋盘

你可以使用 FEN 让棋盘从任意局面开始。下面的示例使用 `setfen` 键，在一个 `\chessboard` 命令中演示一个取自 `skak` 宏包文档中的 FEN 示例：

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame
\chessboard[setfen=r5k1/1b1p1ppp/p7/1p1Q4/2p1r3/PP4Pq/BBP2b1P/R4R1K w - - 0 20]
\end{document}
```

[在 Overleaf 中打开此示例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=FEN+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewchessgame%0A%5Cchessboard%5Bsetfen%3Dr5k1%2F1b1p1ppp%2Fp7%2F1p1Q4%2F2p1r3%2FPP4Pq%2FBBP2b1P%2FR4R1K+w+-+-+0+20%5D%0A%5Cend%7Bdocument%7D)

此示例生成以下输出：

![](/files/31d3490a52396f51d418c08eb0c39b72b2ab13ca)

FEN 记谱法从最上方的横线（第 8 排）开始填充棋盘，并向下依次填充后续各排。例如，要初始化上面的棋盘，第 8 排可用 **r5k1**:

* **r**车
* **5** 空格
* 该 **k**王
* **1** 空格

因此使用记谱法 **r5k1**。请注意，使用小写字母来描述黑方棋子，同时使用大写 **P** 用于白兵，而小写 **p** 用于黑兵。

### 使用 \lastmove

该 `\lastmove` 命令可用于注释最后一步着法：

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame
\mainline{1.e4}

\chessboard

\lastmove{} 是最常见的开局着法。
\end{document}
```

[在 Overleaf 中打开此示例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=xskak+lastmove+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewchessgame%0A%5Cmainline%7B1.e4%7D%0A%0A%5Cchessboard%0A%0A%5Clastmove%7B%7D+is+the+most+common+opening+move.%0A%5Cend%7Bdocument%7D)

此示例生成以下输出：

![](/files/f3980241e4ac8d2fc680a6748376ef5c9c739ea2)

### 变化以及 ... 记法示例

下面重现了 `skak` 宏包文档中的一个示例，已更新为使用 `xskak` 命令。这里，我们看到 `\variation` 命令以及三个点（...）语法 [用于表示黑方走子](#three-dots-black-piece-move-indication):

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame
\mainline{1.e4 e5 2.Nf3 Nc6 3.Bb5}

\chessboard

\mainline{3...a6}

这里使用了一个变体 \variation{3...Nf6}，以展示 \texttt{\string\variation} 命令。

\mainline{4.Ba4}

\chessboard
\end{document}
```

[在 Overleaf 中打开此示例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=xskak+variations+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewchessgame%0A%5Cmainline%7B1.e4+e5+2.Nf3+Nc6+3.Bb5%7D%0A%0A%5Cchessboard%0A%0A%5Cmainline%7B3...a6%7D%0A%0AA+variant+%5Cvariation%7B3...Nf6%7D+is+used+here+to+show+a+%5Ctexttt%7B%5Cstring%5Cvariation%7D+command.%0A%0A%5Cmainline%7B4.Ba4%7D%0A%0A%5Cchessboard%0A%5Cend%7Bdocument%7D)

此示例生成以下输出：

![](/files/10e3eeb8be298b788cf338bed6f1e1b61554468e)

### 仅显示某些棋子

因为 `xskak` 加载 `chessboard` 宏包中，你可以使用极其强大的 **`\chessboard[〈key=value 列表〉]`** 命令来显示或隐藏棋盘中感兴趣的区域，或棋子集合。 [chessboard 文档](https://texdoc.org/serve/chessboard/0) 包含许多示例，例如下面重现的这些。

#### 使用键隐藏某些棋盘格

此示例使用了以下键 `hideall`, `showpieces` 和 `addpieces`:

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame
\chessboard[hideall,
showpieces={P,p},
addpieces=pe5]
\end{document}
```

[在 Overleaf 中打开此示例](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Showing+selected+pieces+in+xskak+example+1\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewchessgame%0A%5Cchessboard%5Bhideall%2C%0Ashowpieces%3D%7BP%2Cp%7D%2C%0Aaddpieces%3Dpe5%5D%0A%5Cend%7Bdocument%7D)

这 `xskak` 示例产生以下输出：

![](/files/3aa22981cd9b7ee47c85d4f6f7e6e359abdee95f)

此示例使用了以下键 `hidefiles`, `showfiles` 和 `showranks`:

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame
\def\myfiles{a,b}
\chessboard[hidefiles=\myfiles,
addpieces=Ra2,
showfiles=a,
showranks=2]
\end{document}
```

[在 Overleaf 中打开此示例](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Showing+selected+pieces+in+xskak+example+2\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewchessgame%0A%5Cdef%5Cmyfiles%7Ba%2Cb%7D%0A%5Cchessboard%5Bhidefiles%3D%5Cmyfiles%2C%0Aaddpieces%3DRa2%2C%0Ashowfiles%3Da%2C%0Ashowranks%3D2%5D%0A%5Cend%7Bdocument%7D)

这 `xskak` 示例产生以下输出：

![](/files/48b722a286429b1f9368e416319edb84239f63bb)

#### 使用键隐藏所有白子或所有黑子

下面的示例演示了以下键 `hidewhite` 和 `hideblack`:

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame
\mainline{1.e4 e5 2.Nf3 Nc6}\chessboard[hidewhite]

\newchessgame
\mainline{1.e4 e5 2.Nf3 Nc6}\chessboard[hideblack]
\end{document}
```

[在 Overleaf 中打开此示例](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Showing+selected+pieces+in+xskak+example+3\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewchessgame%0A%5Cmainline%7B1.e4+e5+2.Nf3+Nc6%7D%5Cchessboard%5Bhidewhite%5D%0A%0A%5Cnewchessgame%0A%5Cmainline%7B1.e4+e5+2.Nf3+Nc6%7D%5Cchessboard%5Bhideblack%5D%0A%5Cend%7Bdocument%7D)

这 `xskak` 示例产生以下输出：

![](/files/f7b03e0d76bda5c8f786e6a6e502111a406d07b9)

## 来自 tex.stackexchange 的更多示例

下面的示例使用了在 [tex.stackexchange.com](https://tex.stackexchange.com).

### 如何高亮方格？

来源：基于 <https://tex.stackexchange.com/a/215334>

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newgame
\chessboard[setfen=8/8/8/3Q4/8/8/8/8 w - - 0 0,
            pgfstyle=border,markfields={d4,d6},
            color=blue!50,
            colorbackfield=c5,
            pgfstyle=color,
            opacity=0.5,
            color=red,
            markfield={d5}]
\end{document}
```

[在 Overleaf 中打开此示例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Highlighting+chess+board+squares\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewgame%0A%5Cchessboard%5Bsetfen%3D8%2F8%2F8%2F3Q4%2F8%2F8%2F8%2F8+w+-+-+0+0%2C%0A++++++++++++pgfstyle%3Dborder%2Cmarkfields%3D%7Bd4%2Cd6%7D%2C%0A++++++++++++color%3Dblue%2150%2C%0A++++++++++++colorbackfield%3Dc5%2C%0A++++++++++++pgfstyle%3Dcolor%2C%0A++++++++++++opacity%3D0.5%2C%0A++++++++++++color%3Dred%2C%0A++++++++++++markfield%3D%7Bd5%7D%5D%0A%5Cend%7Bdocument%7D)

![](/files/d6f088a6a8372abdf1bc4a227d64001e29f41f5a)

### 创建不同的棋盘样式

来源：基于 <https://tex.stackexchange.com/a/358041>

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\storechessboardstyle{4x16}{%
  maxfield=d16,
  borderwidth=1mm,
  color=white,
  colorwhitebackfields,
  color=black,
  colorblackbackfields,
  blackfieldmaskcolor=black,
  whitepiececolor=yellow,
  whitepiecemaskcolor=red,
  blackpiececolor=cyan,
  blackpiecemaskcolor=blue,
  addfontcolors,
  pgfstyle=border,
  color=white,
  markregion=a1-d16,
  showmover=false,
  hlabelwidth=18pt,
  vlabellift=16pt}
  \chessboard[
    style=4x16,
    setpieces={Qa8,Qb4,Qc1,Qd3,Qb16,Qc12,Qa7,Qc15,qa1,qb14,qc11,qd13,qb6,qc2,qa4,qc5},
    padding=1ex,
  ]
\end{document}
```

[在 Overleaf 中打开此示例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Creating+a+custom+chess+board\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bxskak%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cstorechessboardstyle%7B4x16%7D%7B%25%0A++maxfield%3Dd16%2C%0A++borderwidth%3D1mm%2C%0A++color%3Dwhite%2C%0A++colorwhitebackfields%2C%0A++color%3Dblack%2C%0A++colorblackbackfields%2C%0A++blackfieldmaskcolor%3Dblack%2C%0A++whitepiececolor%3Dyellow%2C%0A++whitepiecemaskcolor%3Dred%2C%0A++blackpiececolor%3Dcyan%2C%0A++blackpiecemaskcolor%3Dblue%2C%0A++addfontcolors%2C%0A++pgfstyle%3Dborder%2C%0A++color%3Dwhite%2C%0A++markregion%3Da1-d16%2C%0A++showmover%3Dfalse%2C%0A++hlabelwidth%3D18pt%2C%0A++vlabellift%3D16pt%7D%0A++%5Cchessboard%5B%0A++++style%3D4x16%2C%0A++++setpieces%3D%7BQa8%2CQb4%2CQc1%2CQd3%2CQb16%2CQc12%2CQa7%2CQc15%2Cqa1%2Cqb14%2Cqc11%2Cqd13%2Cqb6%2Cqc2%2Cqa4%2Cqc5%7D%2C%0A++++padding%3D1ex%2C%0A++%5D%0A%5Cend%7Bdocument%7D)

这 `xskak` 示例产生以下输出：

![](/files/f52dbd3223cba4b50567e5639bd1612b71c179f3)

## 进一步阅读

更多信息请参见：

* [在 LaTeX 中创建文档](/latex/zh-cn/latex-ji-chu/01-learn-latex-in-30-minutes.md)
* [插入图片](/latex/zh-cn/geng-duo-zhu-ti/27-inserting-images.md)
* [图片和表格的位置](/latex/zh-cn/tu-biao-he-biao-ge/02-positioning-images-and-tables.md)
* [国际语言支持](/latex/zh-cn/yu-yan/03-international-language-support.md)
* [字体大小、字体族和样式](/latex/zh-cn/zi-ti/01-font-sizes-families-and-styles.md)
* [字体字形](/latex/zh-cn/zi-ti/02-font-typefaces.md)
* [大型项目中的管理](/latex/zh-cn/wen-dang-jie-gou/07-management-in-a-large-project.md)
* [该 `skak` 宏包](https://ctan.org/pkg/skak?lang=en)
* [该 `xskak` 宏包](https://ctan.org/pkg/xskak?lang=en)
* [国际象棋代数记谱法（维基百科）](http://en.wikipedia.org/wiki/Algebraic_notation_\(chess\))
* [Forsyth-Edwards 记谱法（FEN）（维基百科）](http://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation)
* [该 `chessboard` 宏包](https://ctan.org/pkg/chessboard?lang=en)
* [PGN 标准的文本](https://tim-mann.org/Standard)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/zh-cn/te-ding-ling-yu/05-chess-notation.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
