\documentclass[full]{l3doc} \usepackage[scheme=chinese]{ctex} \usepackage{enumitem} \usepackage{indentfirst} \usepackage{titling} \usepackage{geometry} \usepackage{graphicx} \usepackage{fontawesome5} \usepackage{fancyvrb-ex} \usepackage[piecechar={C}{炮}]{chinesechess} % \usepackage[draft,piecechar={C}{炮}]{chinesechess} \IndexPrologue { \section*{Index} \markboth{Index}{Index} \addcontentsline{toc}{section}{Index} The~italic~numbers~denote~the~pages~where~the~ corresponding~entry~is~described,~ numbers~underlined~point~to~the~definition,~ all~others~indicate~the~places~where~it~is~used. } \newcommand\tikzmark[1]{\tikz \coordinate[overlay, remember picture] (#1);} \geometry{ left=4.5cm, right=2cm, top=2cm, bottom=2cm, } \hypersetup { CJKbookmarks, bookmarksopen, bookmarksopenlevel=3, pdfstartview=FitH, pdfinfo = { Title = 中国象棋排版宏包 , Subject = A LaTeX3 package , Author = 耿楠 } } \DoNotIndex{\begin, \end} \setlength{\parskip}{\medskipamount} \DeclareDocumentEnvironment { noteen } { +b } { \par\textbf{\textsf{NOTE:~}}#1\par } {} \DeclareDocumentEnvironment { notezh } { +b } { \par\textbf{\textsf{注意:~}}#1\par } {} \AtEndDocument{ \newgeometry{ left=2cm, right=2cm, top=2cm, bottom=2cm } \PrintIndex } \ExplSyntaxOn \dim_new:N \l__my_syntax_dim \box_new:N \g__my_syntax_box \NewDocumentEnvironment { Syntax } { s } { \dim_set:Nn \l__my_syntax_dim { \textwidth } \hbox_gset:Nw \g__my_syntax_box \small \ttfamily \begin{minipage}[t]{\l__my_syntax_dim} \raggedright\obeyspaces\obeylines } { \end{minipage} \hbox_gset_end: \IfValueF { #1 } { \smallskip } \box_use_drop:N \g__my_syntax_box \smallskip } \DeclareDocumentEnvironment { Description } { o +b } { \hbox_set:Nn \l_tmpa_box { #1 } \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box } \begin{itemize}[labelwidth=\l_tmpa_dim, align=left] #2 \end{itemize} } { } \keys_define:nn { cchess/doc } { opt .tl_set:N = \l_opt_tl, desc .tl_set:N = \l_desc_tl, init .tl_set:N = \l_init_tl, init .initial:n = init-none, } \box_new:N \l__option_box \NewDocumentEnvironment { option } { m +b } { \keys_set:nn { cchess/doc } { #1 } \hbox_set:Nw \l__option_box \small \ttfamily \begin{minipage}[t]{\textwidth} \obeyspaces\obeylines \textcolor{red}{ \l_opt_tl \exp_args:Nx\SpecialOptionIndex{\l_opt_tl} } {~}\l_desc_tl \hfill( \tl_if_eq:NnTF \l_init_tl { init-none } { no~value } { 初始值:~\texttt{\l_init_tl} } ) \end{minipage} \hbox_gset_end: \box_use_drop:N \l__option_box #2 % \vspace*{-4ex} \medskip } { } \DeclareDocumentCommand \opt { O{} m } { \__codedoc_cmd:no {#1} { #2 } } \ExplSyntaxOff \def\vers{\texttt{v1.2.0} } \begin{document} \title{ 中国象棋棋谱排版\\\pkg{chinesechess} 宏包 % \rlap{\makebox[4cm][r]{ % \normalsize $\Longrightarrow$ \color{red} % \protect\hyperlink{en}{English Version} % \protect\hypertarget{zh}{} % }} } \author{\textit{耿楠} \texttt{}} \date{\the\year 年\the\month 月\the\day 日\qquad \vers % \thanks{\url{https://github.com/registor/chinesechess}} \thanks{\url{https://gitee.com/nwafu_nan/chinesechess}} } \maketitle \begin{abstract} \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{printman}利用交叉引用标签\oarg{label}选项对指定% \env{setcchessman*}打谱环境记录的打谱文本在指定位置排版输出。 棋子、棋盘、背景等外观可以通过命令、环境选项或\tn{cchessset}% 命令进行设置。 \end{abstract} {\small \tableofcontents } \newpage \begin{documentation} \section{引言} \pkg{chinesechess}是一个基于\pkg{l3draw}绘图宏包,用\pkg{Expl3}% 开发的中国象棋排版宏包。它利用\pkg{l3draw}的绘图功能,通过为红黑 各7个棋子文字添加背景实现了棋子绘制,利用简单线条实现了棋盘绘制, 并可以通过\pkg{graphicx}宏包可以为棋盘添加图片背景。 该宏包的目的是实现\textsf{不依赖于字体文件}或\textsf{字体宏包}的 中国象棋棋谱排版,由于需要大量绘制操作,因此,其编译速度较低。 \section{用户接口} \subsection{\tn{cchessboard}棋盘排版命令} \begin{function}{\cchessboard} \begin{syntax} \cs{cchessboard} \oarg{外观选项} \cs{cchessboard*} \oarg{外观选项} \end{syntax} \end{function} 按设置的\oarg{外观选项}输出带有32个红黑棋子,并布置于初始位置 的棋盘。 在\oarg{外观选项}中可以通过key-value的方式设置棋子、棋盘的颜色、 字体、字号、线宽等外观。 通过\oarg{外观选项}设置的外观参数仅对当前命令局部有效, 其星号版本命令用于无棋子棋盘排版。 \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.60\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/height=4.0cm} \cchessboard\quad \cchessboard* \end{SideBySideExample} \subsection{\tn{cchessman}棋谱排版命令}\label{subsec-cchessman} \begin{function}{\cchessman} \begin{syntax} \cs{cchessman} \oarg{外观选项} \marg{棋子列表} \end{syntax} \end{function} 按设置的\oarg{外观选项},将在\marg{棋子列表}中指定棋子布置于棋盘的 指定位置并排版输出。 \marg{棋子列表}中各个棋子用大括号分组后再用英文逗号进行分隔,每个棋子 是由大括号括起来的\textsf{棋子位置}与\textsf{棋子编码}组成的。 棋子位置由英文逗号分隔的纵横坐标确定,其中,纵向坐标用英文小写字母 a--j或阿拉伯数字0--9分别表示棋盘纵向10个交点;横向坐标用英文小写字母 a--i或阿拉伯数字0--8分别表示棋盘横向的9个交点。 \textbf{\textsf{注意: }}可以混合使用字母和数字棋子坐标表示方法,但强烈 建议使用单一字母法或数字法表示棋子坐标。 棋子编码采用大写字母表示红棋,小写字母表示黑棋,具体如表% \ref{tab-piececode}所示。 \begin{table}[!htbp] \centering \caption{棋子编码规则}\label{tab-piececode} \begin{tabular}{cc||cc} \hline 编码 & 红棋 & 编码 & 黑棋\\\hline K & 帥 & k & 將 \\ A & 仕 & a & 士 \\ B(E) & 相 & b(e) & 象 \\ N(H) & 马 & n(h) & 馬 \\ R & 车 & r & 車 \\ C & 炮 & c & 炮 \\ P & 兵 & p & 卒 \\\hline \end{tabular} \end{table} 例如,一个完整的\marg{棋子列表}为: |{{4,0}{K}}, {{2,2}{p}}, {{1,7}{C}}, {{4,9}{k}}| 在\oarg{外观选项}中可以通过key-value的方式设置棋子、棋盘的颜色、 字体、字号、线宽等外观。 通过\oarg{外观选项}设置的外观参数仅对当前命令局部有效, \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.50\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.90\linewidth} \cchessman{ {{4,0}{K}}, {{2,2}{p}}, {{1,7}{C}}, {{4,9}{k}} } \end{SideBySideExample} \subsection{\env{setcchessman}打谱排版环境} \begin{function}{setcchessman} \begin{syntax} \tn{begin}|{setcchessman}|\oarg{外观选项} ..... \tn{end}|{setcchessman}| \tn{begin}|{setcchessman*}|\oarg{外观选项} ..... \tn{end}|{setcchessman*}| \end{syntax} \end{function} 按设置的\oarg{外观选项}排版打谱结果。 在\env{setcchessman}环境中,可以通过专用命令\tn{init}% (初始化棋谱状态)(残局),\tn{set}(在指定位置布置棋子),\tn{del}(删除 指定位置的棋子),\tn{mov}(棋子移动)实现打谱操作。 在环境结束后以最终打谱状态排版棋谱。 星号环境\env{setcchessman*}用于同时记录打谱过程的文本描述(如:车一进二等)。 在\env{setcchessman*}环境中可以用\oarg{label}选项设置引用标签, 再用\tn{printman}命令通过引用标签输出对应打谱过程文本描述。 在\oarg{外观选项}中可以通过key-value的方式设置棋子、棋盘的颜色、 字体、字号、线宽等外观。对于\env{setcchessman*}星号环境,% \oarg{外观选项}中的棋子与棋盘相关外观选项设置无效。 通过\oarg{外观选项}设置的外观参数仅对当前命令局部有效, \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.48\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.90\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}棋谱初始化命令} \begin{function}{\init} \begin{syntax} \cs{init} \marg{棋子列表} \end{syntax} \end{function} 用于将\marg{棋子列表}中指定的所有棋子布置于棋盘的指定位置。 \marg{棋子列表}中的棋子表示方法与第\ref{subsec-cchessman}小节 中的说明相同。 \textbf{\textsf{注意: }}该命令只能用于\env{setcchessman}环境中。 \subsubsection{\tn{set}棋子布置命令} \begin{function}{\set} \begin{syntax} \cs{set} \marg{棋子} \end{syntax} \end{function} 用于将指定\marg{棋子}布置于棋盘的指定位置。 \marg{棋子}中的棋子表示方法与第\ref{subsec-cchessman}小节 中的说明相同。 \textbf{\textsf{注意: }}该命令只能用于\env{setcchessman}环境中。 \subsubsection{\tn{del}棋子删除命令} \begin{function}{\del} \begin{syntax} \cs{del} \marg{棋盘坐标} \end{syntax} \end{function} 用于删除\marg{棋盘坐标}中指定坐标处的棋子。 \marg{棋盘坐标}中的表示方法与第\ref{subsec-cchessman}小节 中的说明相同。 \textbf{\textsf{注意: }}该命令只能用于\env{setcchessman}环境中。 \subsubsection{\tn{mov}棋子移动命令} \begin{function}{\mov} \begin{syntax} \cs{mov} \marg{棋子编码}\marg{原棋盘坐标}\marg{新棋盘坐标} \end{syntax} \end{function} 用于将\marg{棋子编码}中指定的棋子从\marg{原棋盘坐标}移动到% \marg{新棋盘坐标}。若\marg{新棋盘坐标}处有棋子,则会被无条件 ``吃''掉(替换)。 \marg{棋子编码}、\marg{原棋盘坐标}和\marg{新棋盘坐标}中采用 棋子与棋盘坐标表示方法与第\ref{subsec-cchessman}小节中的说明相同。 \textbf{\textsf{注意: }}该命令只能用于\env{setcchessman}环境中。 \subsection{\tn{printman}输出打谱结果命令} \begin{function}{\printman} \begin{syntax} \cs{printman} \oarg{每行步数} \marg{label标签} \end{syntax} \end{function} 输出由label标签指定的\env{setcchessman*}打谱环境生成的棋谱文本描述。 \footnote{棋谱文本描述文件以\tn{jobname}+label+索引编号命名, 并以``.man''为后缀名,是一个纯文本文件。} \oarg{每行步数}选项用于指定每行中输出的棋谱步数。 \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} \begin{syntax} \cs{resetpiece} \end{syntax} \end{function} 将棋子字符复位到默认字符。 \subsection{\tn{cchessset}选项设置命令} \begin{function}{\cchessset} \begin{syntax} \cs{cchessset} \marg{外观选项} \end{syntax} \end{function} 通过\marg{外观选项}中的key-value方式设置棋子、棋盘的文字、 字体、颜色、线宽等外观参数。 % \textbf{\textsf{说明: }}执行该命令时,仅有\textbf{\textsf{除}}% % 棋子与棋盘外观的\textbf{\textsf{其它参数}}有效,棋子与棋盘外观 % 参数的设置会在执行下一次命令或环境参数时起效。 通过\cs{cchessset}\marg{外观选项}设置的外观参数对后续所有 棋谱排版命令有效。 \textbf{\textsf{注意: }}由于\pkg{chinesechess}宏包涉及大量 绘图操作,因此建议尽量减少在命令或环境中使用\oarg{外观选项}设置% 以节约编译时间。如需要更改棋子或棋盘外观,可以在引用宏包时, 通过为宏包添加选项实现,也可以执行\tn{cchessset}命令进行必要的 全局设置或在一定范围内进行统一设置。 % \oarg{外观选项}中的棋子与棋盘相关外观选项设置无效。 % \section{宏包选项} \section{宏包选项} 在\pkg{chinesechess}宏包中,棋子与棋盘的文本、字体、颜色、背景等 外观可以可以在引入宏包时通过\oarg{宏包选项}进行设置,也可以在 命令或环境的\oarg{外观选项}中进行局部设置,还可以通过\cs{cchessset}命令 进行全局设置。 强烈建议在引用宏包时通过\oarg{宏包选项}为一个文档统一全局设置棋子与 棋盘外观,以节约编译时间。应避免频繁在命令和环境中使用\oarg{宏包选项}或 使用\cs{cchessset}命令设置棋子与棋盘外面。 \pkg{chinesechess}宏包的选项是一组由(英文)逗号分隔的选项列表,列表中的 选项通常是\marg{key}|=|\marg{value}形式。部分选项的\marg{value}可以省略。 对于同一选项,后续设置会覆盖以前的设置。 \pkg{chinesechess}采用\LaTeX3风格的键值设置,支持不同类型以及多种层次的 选项设定。键值列表中,``|=|''左右的空格不影响设置。但需注意,参数列表中% \textsf{不可以出现空行}。 布尔型的参数\marg{选项}|=true|中的``|=true|''可以省略。 对于``|resize|''缩放和``|man|''子选项,只能用于命令与环境选项中,或通过 \tn{cchessset}命令进行设置。 \textbf{\textsf{注意: }}为提高编译速度,\pkg{chinesechess}宏包会分别根据% \tn{cchessset}命令或棋谱排版命令与环境的可选项中的棋盘与棋子相关参数决定 是否对棋盘或棋子进行重新绘制,因此,前一次的棋盘与棋子外观选项会影响至下 一次新的外观选项出现。如果需要改变前一次外观选项的影响,可以使用一次棋盘 或棋子外观相关选项。 \subsection{草稿选项} \begin{option}{ opt = draft, desc = {= \meta{草稿选项}}, init=false } 设置草稿选项。 \end{option} \oarg{draft}选项将删除所有效果设置,所有棋子仅显示文本, 棋盘仅带有九宫格对角线。从而加快编译速度。 \textbf{\textsf{注意: }}在草稿模式下,命令与环境中与棋子与棋盘外观 相关的选项都将失效,因此,可能与最终排版结果会有出入。 \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.53\linewidth,gobble=2] % \usepackage[draft]{chinesechess} \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.90\linewidth} \cchessboard[draft] \end{SideBySideExample} \subsection{棋盘} \subsubsection{单元格尺寸} \begin{option}{ opt = gridsize, desc = {= \meta{棋盘格尺寸}}, init=10mm } 设置棋盘单元格尺寸。 \end{option} \textbf{\textsf{说明: }}由于在前一个示例中使用了|[draft]|% 参数,为恢复棋子外观,需要执行一次棋子相关设置参数。 \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.60\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.90\linewidth} \cchessboard[gridsize=15mm, piecetype=ooo] \end{SideBySideExample} \bigskip \subsubsection{棋盘类型} \begin{option}{ opt = boardtype, desc = {= \meta{棋盘类型}}, init=x+tn } 设置棋盘类型,目前支持: \end{option} \begin{Description}[a] \item |x|---有九宫对角线,无兵炮位置标志。 \item |x+|---有九宫对角线和兵炮位置标志。 \item |x+t|---有九宫对角线、兵炮位置标志和楚河汉界。 \item |x+tn|---有九宫对角线、兵炮位置标志、楚河汉界和纵线标位数字。 \item |x+Xtn|---有九宫对角线、兵炮位置标志、楚河汉界、纵线标位数字和象位虚线。 \end{Description} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.54\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.35\linewidth} \cchessboard*[boardtype=x]\quad \cchessboard*[boardtype=x+]\\ \cchessboard*[boardtype=x+t]\quad \cchessboard*[boardtype=x+tn]\\ \cchessboard*[boardtype=x+Xtn] \end{SideBySideExample} \bigskip \subsubsection{棋盘线线宽} \begin{option}{ opt = boardlinewd, desc = {= \meta{棋盘线宽}}, init=0.4pt } 设置棋盘线线宽。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.56\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.90\linewidth} \cchessboard*[boardlinewd=1.0pt] \end{SideBySideExample} \bigskip \subsubsection{棋盘线颜色} \begin{option}{ opt = boardlinecolor, desc = {= \meta{棋盘线颜色}}, init=black } 设置棋盘线颜色。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.55\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.90\linewidth} \cchessboard*[boardlinecolor=red] \end{SideBySideExample} \bigskip \subsubsection{棋盘背景} \begin{option}{ opt = boardbg, desc = {= \meta{棋盘背景}}, init=init-none } 设置棋盘背景图的插图文件路径及文件名。 \end{option} \textbf{\textsf{注意: }}使用该选项时,需要在导言区添加|\usepackage{grpahicx}|命令。 \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.55\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.35\linewidth} \cchessboard*[boardbg=bg01]\quad \cchessboard*[boardbg=bg02] \end{SideBySideExample} \bigskip \subsection{棋子} \subsubsection{字符} \begin{option}{ opt = piecechar, desc = {= \meta{棋子字符}}, init=\{K\}\{帥\} } 设置棋子字符,用两组大括号分别指定棋子编码和棋子字符。 其中,棋子编码见表\ref{tab-piececode}。 \end{option} \textbf{\textsf{注意: }}使用该选项时,在能需要在导言区添加字体, 如|\usepackage{fontawesome5}|命令。 \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.55\linewidth,gobble=2] %\usepackage{fontawesome5} \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.90\linewidth} \cchessboard[% piecechar={K}{\faChessKing}, piecechar={A}{\faShield*}, piecechar={E}{\faChessBishop}, piecechar={H}{\faChessKnight}, piecechar={R}{\faChessRook}, piecechar={C}{\faMeteor}, piecechar={P}{\faChessPawn}, piecechar={k}{\faChessQueen}, piecechar={a}{\faShield*}, piecechar={e}{\faChessBishop}, piecechar={h}{\faChessKnight}, piecechar={r}{\faChessRook}, piecechar={c}{\faMeteor}, piecechar={p}{\faChessPawn}, boardlinecolor=red] \end{SideBySideExample} \bigskip \resetpiece \cchessset{piecechar={C}{炮}} \subsubsection{字体} \begin{option}{ opt = piecefont, desc = {= \meta{棋子字符字体}}, init=\cs{kaishu} } 设置棋子字符字体。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.54\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.90\linewidth} \cchessboard[piecefont=\sffamily] \end{SideBySideExample} \bigskip \subsubsection{边框类型} \begin{option}{ opt = piecetype, desc = {= \meta{棋子边框类型}}, init=|ooo| } 设置棋子外框类型,目前支持: \end{option} \begin{Description}[a] \item |o|---实心填充圆(小写英文字母``|o|'')。 \item |oo|---双同心实心圆。 \item |ooo|---双同心实心圆叠加阴影错位圆。 \end{Description} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.55\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.40\linewidth} \cchessboard[piecetype=o]\quad \cchessboard[piecetype=oo]\\ \cchessboard[piecetype=ooo] \end{SideBySideExample} \bigskip \subsubsection{边框线宽} \begin{option}{ opt = boxlinewd, desc = {= \meta{棋子外框线宽度}}, init=0.4pt } 设置棋子外框线线宽。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.60\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.95\linewidth} \cchessboard[boxlinewd=0.8pt] \end{SideBySideExample} \bigskip \subsubsection{边框颜色} \begin{option}{ opt = boxcolor, desc = {= \meta{棋子外框线颜色}}, init=black } 设置棋子外框线颜色。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.60\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.95\linewidth} \cchessboard[boxcolor=white] \end{SideBySideExample} \bigskip \subsubsection{红棋字符颜色} \begin{option}{ opt = redpiece, desc = {= \meta{红棋棋子字符颜色}}, init=red } 设置红棋棋子字符颜色。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.60\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.95\linewidth} \cchessboard[redpiece=white] \end{SideBySideExample} \bigskip \subsubsection{黑棋字符颜色} \begin{option}{ opt = blkpiece, desc = {= \meta{黑棋棋子字符颜色}}, init=black } 设置黑棋棋子字符颜色。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.60\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.95\linewidth} \cchessboard[blkpiece=white] \end{SideBySideExample} \bigskip \subsubsection{背景圆填充色} \begin{option}{ opt = lower, desc = {= \meta{棋子背景圆填充色}}, init=init-none } 设置棋子背景圆填充色。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.60\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.95\linewidth} \cchessboard[lower=black] \end{SideBySideExample} \bigskip \subsubsection{表面圆环填充色} \begin{option}{ opt = donut, desc = {= \meta{棋子表面圆环填充色}}, init=init-none } 设置棋子表面圆环填充色。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.60\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.95\linewidth} \cchessboard[donut=red] \end{SideBySideExample} \bigskip \subsubsection{红棋表面圆填充色} \begin{option}{ opt = redupper, desc = {= \meta{红棋棋子表面圆填充色}}, init=init-none } 设置红棋棋子表面圆填充色。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.60\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.95\linewidth} \cchessboard[redupper=red, redpiece=white] \end{SideBySideExample} \bigskip \subsubsection{黑棋表面圆填充色} \begin{option}{ opt = blkupper, desc = {= \meta{黑棋棋子表面圆填充色}}, init=init-none } 设置黑棋棋子表面圆填充色。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.60\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.95\linewidth} \cchessboard[blkupper=black, blkpiece=white] \end{SideBySideExample} \bigskip \subsubsection{阴影错位圆填充色} \begin{option}{ opt = shadow, desc = {= \meta{棋子阴影错位圆填充色}}, init=init-none } 设置棋子阴影错位圆填充色。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.60\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.95\linewidth} \cchessboard[shadow=red!80] \end{SideBySideExample} \bigskip \subsubsection{笔划} \begin{option}{ opt = scharstroke, desc = {= \meta{棋子字符笔划类型}}, init=bold } 设置棋子字符笔划类型。 \end{option} \begin{Description}[a] \item |none|---默认笔划。 \item |solid|---实线笔划轮廓,笔划内部透明,颜色使用字符颜色。 \item |white|---实线白色笔划轮廓,笔划内部用白色填充。 \item |bold|---加粗笔划,颜色使用字符颜色。 \item |invisible|---隐藏笔划。 \end{Description} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.58\linewidth,gobble=2] \centering % 为便排版,进行缩放 \cchessset{resize/type=real, resize/width=.95\linewidth} \cchessboard[charstroke=white, redupper=red,blkupper=black] \end{SideBySideExample} \bigskip \subsection{打谱} 打谱参数位于|man|子选项中,可以使用|man={label=test}|或 |man/label=test|两种形式进行设置。 \subsubsection{label标签} \begin{option}{ opt = label, desc = {= \meta{棋谱标签}}, init=init-none } 设置\env{setcchessman*}打谱环境交叉引用标签。 \end{option} 该选项目前仅支持\env{setcchessman*}打谱环境。 \subsubsection{每行棋谱步数} \begin{option}{ opt = nums, desc = {= \meta{每行棋谱步数}}, init=2 } 设置\tn{printman}输出棋谱时,每行输出棋谱的步数。 \end{option} 该选项只在\tn{printman}命令中起作用。 \textbf{\textsf{说明: }}由于在前一个示例中使用了|[charstroke=white]|% 参数,为恢复棋子外观,需要执行一次棋子相关设置参数。 但要注意的是|setcchessman*|星号环境并不执行棋子棋盘重构,因此,此处 需要在\tn{cchessset}命令中重新设置棋子笔划类型。 \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.45\linewidth,gobble=2] \centering \printman{test} % 为便排版,进行缩放 \cchessset{charstroke=bold, resize/type=real, resize/width=0.90\linewidth} \begin{setcchessman*}[man/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*} \begin{flushleft} \small \printman[man/nums=4]{test} \end{flushleft} \end{SideBySideExample} \subsection{棋谱缩放} 缩放方式位于|resize|子选项中,可以使用|resize={type=real}|或 |resize/xscale=0.5|两种形式进行设置。 \subsubsection{缩放方式} \begin{option}{ opt = type, desc = {= \meta{棋谱缩放方式}}, init=none } 设置最终棋谱输出时的整体缩放方式,目前支持: \end{option} \begin{Description}[a] \item |none|---无缩放。 \item |real|---按指定的width、height、xscale或yscale进行缩放。 \end{Description} \bigskip \subsubsection{横向缩放因子} \begin{option}{ opt = xscale, desc = {= \meta{x方向缩放系数}}, init=1 } 设置x方向缩放系数,需要配合|resize|缩放方式参数一起使用。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.48\linewidth,gobble=2] \centering \cchessboard[resize/type=real, resize/xscale=0.5] \end{SideBySideExample} \bigskip \subsubsection{纵向缩放因子} \begin{option}{ opt = yscale, desc = {= \meta{y方向缩放系数}}, init=1 } 设置y方向缩放系数,需要配合|resize|缩放方式参数一起使用。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.70\linewidth,gobble=2] \centering \cchessboard[% resize/type=real, resize/yscale=0.5] \end{SideBySideExample} \bigskip \subsubsection{横向尺寸} \begin{option}{ opt = width, desc = {= \meta{宽度}}, init=init-none } 设置输出宽度,需要配合|resize|缩放方式参数一起使用。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.65\linewidth,gobble=2] \centering \cchessboard[% resize/type=real, resize/width=7cm] \end{SideBySideExample} \bigskip \subsubsection{纵向尺寸} \begin{option}{ opt = height, desc = {= \meta{高度}}, init=init-none } 设置输出高度,需要配合|resize|缩放方式参数一起使用。 \end{option} \begin{SideBySideExample}[frame=single,numbers=left, xrightmargin=.65\linewidth,gobble=2] \centering \cchessboard[% resize/type=real, resize/height=6cm] \end{SideBySideExample} \textbf{\textsf{说明: }}缩放纵/横参数可以混合使用。 \bigskip % \bigskip % \title{ % \pkg{chinesechess} package for writing Chinese chess % \rlap{\makebox[4cm][r]{ % \normalsize $\Longrightarrow$ \color{red} % \protect\hyperlink{zh}{中文版本} % \protect\hypertarget{en}{} % }} % } % \author{Nan Geng \texttt{}} % \date{\today\qquad \vers} % \maketitle % % \section{Introduction} % % \section{Interface} % % \section{options} \end{documentation} \end{document}