summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/chinesechess/chinesechess.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/chinesechess/chinesechess.tex')
-rw-r--r--macros/latex/contrib/chinesechess/chinesechess.tex137
1 files changed, 102 insertions, 35 deletions
diff --git a/macros/latex/contrib/chinesechess/chinesechess.tex b/macros/latex/contrib/chinesechess/chinesechess.tex
index 9220174cc8..60404db623 100644
--- a/macros/latex/contrib/chinesechess/chinesechess.tex
+++ b/macros/latex/contrib/chinesechess/chinesechess.tex
@@ -123,7 +123,7 @@
{ \__codedoc_cmd:no {#1} { #2 } }
\ExplSyntaxOff
-\def\vers{\texttt{v1.0.0} }
+\def\vers{\texttt{v1.1.0} }
\begin{document}
\title{
@@ -150,15 +150,14 @@
\section{引言}
-\pkg{chinesechess}是一个基于\pkg{l3draw}用\pkg{Expl3}开发的
-中国象棋排版宏包。它提供了\tn{cchessboard} 全棋盘、
-\tn{cchessbord*}空白棋盘和\tn{cchessman}棋谱排版命令。同时,
+\pkg{chinesechess}是一个基于\pkg{l3draw}绘图宏包,用\pkg{Expl3}%
+开发的中国象棋排版宏包。它提供了\tn{cchessboard}(全棋盘)、%
+\tn{cchessbord*}(空棋盘)和\tn{cchessman}(棋谱)排版命令。同时,
该宏包还提供了用于打谱的排版环境\env{setcchessman},在该环境
-中,可以通过环境专用命令\tn{init}初始化棋谱状态,\tn{set}在
-指定位置布置棋子,\tn{del}删除指定位置的棋子,\tn{mov}实现
-棋子的移动,从而实现打谱操作,并在环境结束后以最终状态排版棋谱。
-另外,也可以通过星号环境\env{setcchessman*}实现棋谱的文本描述
-输出。
+中,可以通过环境专用命令\tn{init}(初始化棋谱状态),\tn{set}(在
+指定位置布置棋子),\tn{del}(删除指定位置的棋子),\tn{mov}(实现
+棋子的移动),从而实现打谱操作,并在环境结束后以最终状态排版棋谱。
+另外,也可以通过星号环境\env{setcchessman*}实现棋谱文本输出。
棋子、棋盘、背景等外观可以通过命令、环境选项或\tn{cchessset}%
命令进行设置。
@@ -226,8 +225,8 @@
编码 & 红棋 & 编码 & 黑棋\\\hline
K & 帥 & k & 將 \\
A & 仕 & a & 士 \\
- E & 相 & e & 象 \\
- H & 马 & h & 馬 \\
+ B(E) & 相 & b(e) & 象 \\
+ N(H) & 马 & n(h) & 馬 \\
R & 车 & r & 車 \\
C & 炮 & c & 炮 \\
P & 兵 & p & 卒 \\\hline
@@ -274,7 +273,9 @@
指定位置的棋子,\tn{mov}实现棋子的移动,从而实现打谱操作。
在环境结束后以最终打谱状态排版棋谱。
- 星号环境\env{setcchessman*}会同时排版棋谱的文本描述(如:车一进二等)。
+ 星号环境\env{setcchessman*}用于记录排版棋谱的文本描述(如:车一进二等)。
+ 可在在\env{setcchessman*}环境中用label选项进行标记,然后用\tn{printman}%
+ 输出该棋谱。
在\oarg{外观选项}中可以通过key-value的方式设置棋子、棋盘的颜色、
字体、字号、线宽等外观。
@@ -302,27 +303,6 @@
\end{setcchessman}
\end{SideBySideExample}
-\begin{SideBySideExample}[frame=single,numbers=left,
- xrightmargin=.45\linewidth,gobble=2]
- \centering
- % 为便排版,进行缩放
- \cchessset{resize=real,
- width=.30\linewidth}
- \begin{setcchessman*}
- % 残局初始化
- \init{ {{4,0}{K}}, {{2,2}{p}},
- {{1,7}{C}}, {{4,9}{k}} }
- % 添加棋子
- \set{e,d}{P} \set{8,g}{h}
- % 删除棋子
- \del{4,3}
- % 移动棋子
- \mov{C}{b,h}{b,b} \mov{p}{2,2}{3,2}
- \mov{K}{4,0}{4,1} \mov{h}{8,6}{6,7}
- \mov{K}{4,1}{3,1} \mov{h}{6,7}{5,5}
- \end{setcchessman*}
-\end{SideBySideExample}
-
\subsection{打谱专用命令}
\subsubsection{\tn{init}棋谱初始化命令}
@@ -386,6 +366,52 @@
\textbf{\textsf{注意: }}该命令只能用于\env{setcchessman}环境中。
+\subsection{\tn{printman}输出打谱结果命令}
+
+\begin{function}{\printman}
+ \begin{syntax}
+ \cs{printman} \marg{\env{setcchessman*}环境的label标签}
+ \end{syntax}
+\end{function}
+
+ 输出由label标签指定的\env{setcchessman*}打谱环境生成的棋谱。
+
+\subsection{\tn{getpiece}输出棋子命令}
+
+\begin{function}{\getpiece}
+ \begin{syntax}
+ \cs{getpiece} \oarg{棋子字号} \marg{棋子编码}
+ \end{syntax}
+\end{function}
+
+ 按\oarg{棋子字号}指定的字号将用\marg{棋子编码}指定的棋子在当前位置输出。
+
+ \marg{棋子编码}中的编码详见表表\ref{tab-piececode}。
+
+\begin{SideBySideExample}[frame=single,numbers=left,
+ xrightmargin=.28\linewidth,gobble=2]
+ \centering
+ \getpiece{K}\getpiece{A}\getpiece{B}\getpiece{R}%
+ \getpiece{N}\getpiece{C}\getpiece{P}
+
+ \getpiece{k}\getpiece{a}\getpiece{b}\getpiece{r}%
+ \getpiece{n}\getpiece{c}\getpiece{p}
+\end{SideBySideExample}
+
+\subsection{\tn{piecechar}棋子字符设置命令}
+
+\begin{function}{\piecechar}
+ \begin{syntax}
+ \cs{piecechar} \marg{棋子编码} \marg{棋子字符}
+ \end{syntax}
+\end{function}
+
+ 用于将\marg{棋子编码}指定的棋子字符设置为指定的\marg{棋子字符}。
+
+ \marg{棋子编码}中的编码详见表表\ref{tab-piececode}。
+
+ \textbf{\textsf{说明: }}该功能也可以通过|piecechar|外观选项实现。
+
\subsection{\tn{resetpiece}棋子字符复位命令}
\begin{function}{\resetpiece}
@@ -624,14 +650,14 @@
piecechar={E}{\faChessBishop},
piecechar={H}{\faChessKnight},
piecechar={R}{\faChessRook},
- piecechar={C}{\faBomb},
+ piecechar={C}{\faMeteor},
piecechar={P}{\faChessPawn},
piecechar={k}{\faChessQueen},
piecechar={a}{\faShield*},
piecechar={e}{\faChessBishop},
piecechar={h}{\faChessKnight},
piecechar={r}{\faChessRook},
- piecechar={c}{\faBomb},
+ piecechar={c}{\faMeteor},
piecechar={p}{\faChessPawn},
boardlinecolor=red]
\end{SideBySideExample}
@@ -862,6 +888,47 @@
redupper=red,blkupper=black]
\end{SideBySideExample}
+\bigskip
+
+\subsection{打谱}
+
+\subsubsection{label标签}
+
+\begin{option}{ opt = label, desc = {= \meta{棋谱标签}}, init=init-none }
+ 设置\env{setcchessman*}打谱环境交叉引用标签。
+\end{option}
+
+\subsubsection{每行棋谱步数}
+
+\begin{option}{ opt = mansperline, desc = {= \meta{每行棋谱步数}}, init=2 }
+ 设置\tn{printman}输出棋谱时,每行输出棋谱的步数。
+\end{option}
+
+\begin{SideBySideExample}[frame=single,numbers=left,
+ xrightmargin=.45\linewidth,gobble=2]
+ \centering
+ \printman{test}
+
+ \bigskip
+
+ % 为便排版,进行缩放
+ \cchessset{resize=real,
+ width=0.90\linewidth}
+ \begin{setcchessman*}[label=test]
+ % 残局初始化
+ \init{ {{4,0}{K}}, {{2,2}{p}},
+ {{1,7}{C}}, {{4,9}{k}} }
+ % 添加棋子
+ \set{e,d}{P} \set{8,g}{h}
+ % 删除棋子
+ \del{4,3}
+ % 移动棋子
+ \mov{C}{b,h}{b,b} \mov{p}{2,2}{3,2}
+ \mov{K}{4,0}{4,1} \mov{h}{8,6}{6,7}
+ \mov{K}{4,1}{3,1} \mov{h}{6,7}{5,5}
+ \end{setcchessman*}
+\end{SideBySideExample}
+
% \bigskip
% \title{