> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-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` 扩展了所支持的 PGN 子集 `skak`.

**趣闻**：skak 在丹麦语中意为国际象棋。

### 一些说明

以下是 `xskak` 文档：

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

> `xskak` 是对……的扩展（而不是替代） **主要工作仍由宏包 `skak`**……请先阅读该宏包的文档 `skak`...

* **注意**：在与国际象棋相关的宏包中 [列于 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) 有一个名为 [`skaknew`](https://ctan.org/pkg/skaknew)。尽管名字如此，该 `skaknew` 宏包是 *不* 原始……的新版本或增强版 `skak` 宏包：它是一套 Type 1 国际象棋字体。该 `xskak` 宏包使用了 `skaknew` 字体，因此你无需将它们手动加载到项目中。

### 最小 xskak 示例

为了“设置场景”，不再作进一步解释，下面是一个最小的 `xskak` 宏包示例，它排版两个棋盘：一个是空棋盘，另一个则包含所有棋子并处于初始位置：

```latex
\documentclass{article}
% Note: you only need to load xskak,
% not the skak or chessboard packages.
\usepackage{xskak}
\begin{document}
% This \chessboard command draws
% an empty chess board: the option
% showmover=false will be discussed
% later in the article
\chessboard[showmover=false]
% The \newchessgame command
% initializes a new game:
\newchessgame
% Because a new game was initialized,
% \chessboard now draws a
% board with chess pieces:
\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 年由 [斯蒂文·爱德华兹](https://www.chessprogramming.org/Steven_Edwards)发明的。 [1994 年的原始 PGN 规范](https://archive.org/details/pgn-standard-1994-03-12)可在 archive.org 上获取 <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  | 车  |
| B  | 象  |
| N  | 马  |

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

### 单步着法记法

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

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

* *非兵* 着法：
  * **Be5**: **B**象移动到格子 **e5**
  * **Nf3**：马**N**移动到格子 **f3**
* *兵* 着法：
  * **c5**：兵移动到格子 **c5**
  * **注意**：在某些情况下（例如某些 LaTeX 命令），兵 *会被标识* 为大写字母 **P**；因此 **c5** 可以写作 **Pc5**.

#### 三点（...）黑方着法标记

《……》第 8.2.2.2 节 [Portable Game Notation 标准](https://tim-mann.org/Standard) 解释了在着法编号后使用三点（...）的用法（例如， **3...e6**):

> 白方着法编号由表示完整回合数的整数加上一个句点构成。黑方着法编号由表示完整回合数的整数加上 ***三个句点***.

### 一系列着法的约定

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

* 每一步单独的着法 *通常* 非兵棋子使用大写字母表示，不过如上所述，在某些情况下（约定中）也可以用大写字母 P 表示兵的着法。
* 一系列国际象棋着法是由以下序列组成的 `<white piece move> <black piece move>` 成对着法——请注意，每个着法对都要编号（见下例）

### 其他国际象棋记谱法：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{*list of moves*}` 其中 `*list of moves*` 以……表示 [国际象棋代数记谱法](#algebraic-notation)。我们将演示如何排版下面这串着法：

1. **e4 e5**：白兵移动到 **e4**，黑兵移动到 **e5**
2. **Nf3 Nc6**：白**N**马移动到 **f3**，黑**N**马移动到 **c6**
3. **Bb5 a6**：白方 **B**象移动到 **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 % A skak package command. Future examples will use \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 list〉]`**：开始一局新游戏并初始化棋盘。 `[〈key=value list〉]` 是可选的，因此你也可以写 `\newchessgame` 并依赖默认的棋盘设置。可选键的列表见 [`xskak` 文档](https://texdoc.org/serve/xskak/0).
* **`\mainline{〈list of chess moves〉}`**：处理 `〈list of chess moves〉` 并更新棋盘，使得 `\showboard` （或者 `\chessboard`）排版棋盘的当前状态。
* **`\showboard`**：排版棋盘。该 `\showboard` 命令源自底层的 `skak` 宏包，而该宏包 `xskak` 对其进行了扩展。该 [`chessboard` 宏包](https://ctan.org/pkg/chessboard?lang=en)，由……加载 `xskak`，提供了非常灵活的 **`\chessboard[〈key=value list〉]`** 命令，而 `xskak` 宏包会向其添加额外的键。由于 `\chessboard[...]` 旨在取代 `\showboard`，本文后续示例将只使用 `\chessboard[...]` 该命令。

### 介绍 \chessboard 命令

命令 **`\chessboard[〈key=value list〉]`**：使用一个可选的 `〈key=value list〉`。可用的 `键` 列表如下 *广泛地*，这能对棋盘的大小、内容、布局、设计、注释等进行高度控制。鼓励读者阅读……的优秀宏包文档 [`chessboard` （PDF）](https://texdoc.org/serve/chessboard/0) 和 [`xskak` （PDF）](https://texdoc.org/serve/xskak/0)，两者都包含大量有帮助的示例——*许多* 其数量超过本文所能展示的范围。

由于这些键是可选的，你可以写 `\chessboard` ，它使用宏包默认值来排版棋盘；例如，下面的代码使用 `\chessboard` 不带任何选项。后面手动在 Inkscape 中添加的注释显示了 *走子标记* （这里以方块形式呈现），它们默认会被排版出来：

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

\newchessgame
\mainline{1.e4 e5 2.Nf3 Nc6 3.Bb5 a6}
\chessboard % instead of \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)

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

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame
\mainline{1.e4 e5 2.Nf3 Nc6 3.Bb5 a6}\par
\chessboard[showmover=false] % Hide the 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)

该示例产生如下输出——一个没有走子标记的棋盘：

![](/files/2a77787c1e9f70e283f389c04766b6b0a47748bc)

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

## 更多 xskak 示例

### 文本注释

PGN 规范支持在注释文本周围使用花括号来添加注释： `{〈Text〉}`；不过， `xskak` 宏包更倾向于将文本注释写作 `\xskakcomment{〈Text〉}`，如下例所示：

```latex
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame %Start a new chess game
\mainline{1.e4 e5 2.Nf3 Nc6 3.Bb5 a6 \xskakcomment{ This is a comment. }}\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` 用于演示一个取自以下内容的 FEN 示例的命令 `skak` 宏包文档：

```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**ook
* **5** 空格
* 该 **k**ing
* **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 list〉]`** 命令来显示或隐藏棋盘上感兴趣的区域，或棋子集合。该 [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-xing-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://ayakaleaf-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.
