Comment écrire et représenter des parties d’échecs ?#

1.  Du côté de #

1.1.  Avec chessboard et xskak#

Le package chessboard, développé par Ulrike Fischer, est sans doute le package d’échec le plus abouti. Il s’utilise le plus souvent avec xskak, package de la même autrice, qui est une extension de skak (voir section suivante).

chessboard fournit la commande \chessboard[<clé=liste de valeurs>] permettant de composer des plateaux et des positions d’échec. Il est extrêmement puissant et permet de personnaliser l’apparence, d’annoter la position, etc. On peut construire les positions pièces par pièces ou bien lire le format FEN. Enfin, si on utilise chessboard conjointement avec xskak (voir ci-dessous) on pourra représenter les positions issues d’une partie décrite avec le format PGN.

Un exemple valant souvent bien plus qu’un long discours, voilà comment représenter la dernière position d’une partie décrite à l’aide du format PGN.

\documentclass{article}
\usepackage{xskak}
\usepackage{chessboard}

\begin{document}
\newchessgame
\mainline{1. e4 e5 2. Nf3 Nc6 3. Bb5 a6} % commande fournie par skak
\chessboard
\end{document}

Grâce à xskak, on peut aussi écrire, dans le texte courant, les coups. Les documentations de ces deux packages sont très fournis, et permettent de trouver à coup sûr le code pour faire ce que l’on souhaite.

\documentclass{article}
\usepackage{xskak}
\usepackage{chessboard}

\begin{document}
\newchessgame[id=A,white=John White,
black=Jack Black, result=1--0]
\mainline{1.e4 e5 2.Bc4 Nc6 3. Qh5 Nf6 4.Qxf7#}


\newchessgame % a game between A and the board
\mainline{1.e4}

\setchessboard{shortenend=5pt,color=red}%
\chessboard[lastmoveid=A,setfen=\xskakget{nextfen},
pgfstyle=border,color=red,
markfields={\xskakget{moveto},\xskakget{movefrom}},
pgfstyle=straightmove,
markmove=\xskakget{movefrom}-\xskakget{moveto}]
\end{document}

1.2.  Les pionniers#

skak#

L’extension skak a été un pionnier sur la composition des plateaux d’échec et des positions. Ce package a aussi fourni une fonte d’échecs (qui a été étendue avec skaknew).

\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[a5paper]{geometry}
\usepackage{skak}
\usepackage{babel}

\begin{document}
\begin{itemize}
\item Petit exercice d'entraînement : les blancs jouent et font mat en trois
  coups.  \fenboard{7k/4K1pp/7N/8/8/8/8/B7 w - - 0 1}
  \begin{center}
    \showboard
  \end{center}
  Vous ne voyez pas ? Voici la solution : \mainline{1. Bf6 gxf6 2. Kf8 f5
    3. Nf7\mate}
\item À vous de jouer maintenant !  Voici un autre problème où les blancs font
  mat en trois coups.  \fenboard{7B/8/8/8/8/N7/pp1K4/k7 w - - 0 1}
  \begin{center}
    \showinverseboard
  \end{center}
\end{itemize}
\end{document}

chess#

Une autre extension, chess, est beaucoup plus ancienne et un peu moins souple, mais permet globalement de faire la même chose que skak

2.  Avec #

Depuis 2023, il est possible de dessiner des plateaux d’échecs et des positions avec et le package mpchess. L’apparence des dessins se veut moderne et largement inspiré de ce que propose l’excellent site web lichess.org.

Là encore, ce package offre les outils classiques de représentation des parties d’échec (format FEN, format PGN, annotations, couleurs, etc.).

Plusieurs ensembles de pièces et style de plateaux sont disponibles. Une fonte OpenType restreinte aux pièces d’échecs a été créé pour l’occasion (pièces par défaut).

Pour illustrer l’utilisation de ce package, nous allons l’utiliser avec et le package luamplib.

%!TEX engine=lualatex
\documentclass{article}
\usepackage{luamplib}

\begin{document}
\begin{mplibcode} % code MetaPost
input mpchess;
string pgnstr;
pgnstr:="1. e4 e5 2. Bc4 d6 3. Nf3 Bg4 4. Nc3 g6 5. Nxe5 Bxd1";
build_chessboards_from_pgn(pgnstr);
beginfig(0);
set_backboard_width(8cm);
set_white_player("Kermur de Legal");
set_black_player("Saint-Brie");
init_backboard;
draw backboard;
show_last_move(10);
draw_comment("?","d1");
color_square(0.3[green,black])("c4","c3","e5");
color_square(0.3[red,black])("e8");
draw chessboard_step(10);
draw_arrows(0.3[green,black])("e5|-f7","c3-|d5");
draw_arrows(0.3[red,black])("c4--f7");
endfig;
\end{mplibcode}
\end{document}