国际象棋符号:在颜色和符号样式之间切换

国际象棋符号:在颜色和符号样式之间切换

请考虑以下两个示例:

示例 A

\documentclass{article}

\usepackage{xskak}

\begin{document}

\usetextfig
\textsymfigsymbol{R}a1 versus 
\usesymfig
\textsymfigsymbol{R}a1

\end{document}

输出A

这里,符号风格发生了改变。

示例 B

\documentclass{article}

\usepackage{xskak}
\usesymfig

\setboardfontsize{10pt}

\begin{document}

\textsymfigsymbol{Q} versus
\raisebox{-1.5pt}{\BlackQueenOnWhite}

\end{document}

输出B

此处,棋子的颜色发生了改变。

附录

其他针对黑棋的命令是

\BlackKingOnWhite
\BlackRookOnWhite
\BlackBishopOnWhite
\BlackKnightOnWhite
\BlackPawnOnWhite

问题

我可以以某种方式把这两个例子结合起来吗?

我想要一个命令,可以在排版黑色或白色部分(所有不同的部分!)之间切换,同时能够使用\usetextfig或在代数符号和图形符号之间进行全局切换\usesymfig

答案1

我会这样做。通过使用ex值并在命令中设置字体大小,它也适用于其他字体大小:

\documentclass{article}

\usepackage{xskak}

\usesymfig


\usepackage{tikz}
\makeatletter
  \newcommand*\cfss@king@@LSBblack  {\raisebox{-0.31ex}{\setboardfontsize{\f@size}\BlackKingOnWhite}}
  \newcommand*\cfss@queen@@LSBblack {\raisebox{-0.37ex}{\setboardfontsize{\f@size}\BlackQueenOnWhite}}
  \newcommand*\cfss@rook@@LSBblack  {\raisebox{-0.26ex}{\setboardfontsize{\f@size}\BlackRookOnWhite}}
  \newcommand*\cfss@bishop@@LSBblack{\raisebox{-0.35ex}{\setboardfontsize{\f@size}\BlackBishopOnWhite}}
  \newcommand*\cfss@knight@@LSBblack{\raisebox{-0.30ex}{\setboardfontsize{\f@size}\BlackKnightOnWhite}}
  \newcommand*\cfss@pawn@@LSBblack  {\raisebox{-0.31ex}{\setboardfontsize{\f@size}\BlackPawnOnWhite}}

\newcommand\usesymfigblack{%
 \def\cfss@figlanguage{@LSBblack}}
\makeatother 


\begin{document}

\usetextfig
\textsymfigsymbol{Q}
\usesymfig
\textsymfigsymbol{Q}
\usesymfigblack
\textsymfigsymbol{Q}


\footnotesize

\usetextfig
\textsymfigsymbol{Q}
\usesymfig
\textsymfigsymbol{Q}
\usesymfigblack
\textsymfigsymbol{Q}

\end{document}

在此处输入图片描述

答案2

基线存在一个令人烦恼的问题。如果它们没有正确对齐,请将值更改-1.2pt为合适的值。

\documentclass{article}
\usepackage{chessfss}

\makeatletter
\def\cfssfixbaseline#1{\raise-1.2pt\hbox{#1}}
\def\useblackfig{\def\cfss@figlanguage{@BLSB}}
\def\usewhitefig{\def\cfss@figlanguage{@WLSB}}
\def\cfss@king@@WLSB{\cfssfixbaseline{\cfss@WhiteKingOnWhite}}
\def\cfss@queen@@WLSB{\cfssfixbaseline{\cfss@WhiteQueenOnWhite}}
\def\cfss@rook@@WLSB{\cfssfixbaseline{\cfss@WhiteRookOnWhite}}
\def\cfss@bishop@@WLSB{\cfssfixbaseline{\cfss@WhiteBishopOnWhite}}
\def\cfss@knight@@WLSB{\cfssfixbaseline{\cfss@WhiteKnightOnWhite}}
\def\cfss@pawn@@WLSB{\cfssfixbaseline{\cfss@WhitePawnOnWhite}}
\def\cfss@king@@BLSB{\cfssfixbaseline{\cfss@BlackKingOnWhite}}
\def\cfss@queen@@BLSB{\cfssfixbaseline{\cfss@BlackQueenOnWhite}}
\def\cfss@rook@@BLSB{\cfssfixbaseline{\cfss@BlackRookOnWhite}}
\def\cfss@bishop@@BLSB{\cfssfixbaseline{\cfss@BlackBishopOnWhite}}
\def\cfss@knight@@BLSB{\cfssfixbaseline{\cfss@BlackKnightOnWhite}}
\def\cfss@pawn@@BLSB{\cfssfixbaseline{\cfss@BlackPawnOnWhite}}
\makeatother

\begin{document}
\textsymfigsymbol{K}
\usewhitefig
\textsymfigsymbol{K}
\useblackfig
\textsymfigsymbol{p}
\textsymfigsymbol{N}
\usewhitefig
\textsymfigsymbol{R}
\usetextfig
\textsymfigsymbol{R}
\end{document} 

答案3

我更喜欢封闭命令,而不是不断输入各种切换命令。
换句话说:一个根据大小写识别所需符号的命令,就像您可以使用 board-input inxskak.sty或执行的操作一样chessboard.sty

所以我有这样的想法

\def\FirstArgX{text}
\newcommand\skaksymb[2][]{\begingroup%
\def\SecondArgX{#1}%
\ifx\FirstArgX\SecondArgX \usetextfig\textsymfigsymbol{#2}\else%
\if\isuppercase{#2}\textsymfigsymbol{#2}%  \usewhitefig
\else%
\useblackfig\textsymfigsymbol{#2}\fi\fi%
\endgroup}

精心制作。(提示:我没有得到\skaksymb仍然使用与旧名称相同的名称的命令\textsymfigsymbol。)

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage[margin=15mm]{geometry}
\usepackage[most]{tcolorbox}

\usepackage{chessfss}
\usepackage{xskak}
\usepackage{chessboard}
\setchessboard{showmover=false}

%https://tex.stackexchange.com/questions/403947/chess-notation-switch-between-color-and-notation-style
\makeatletter
\def\cfssfixbaseline#1{\raisebox{-0.31ex}{\setboardfontsize{\f@size}#1}}
\def\useblackfig{\def\cfss@figlanguage{@BLSB}}
\def\usewhitefig{\def\cfss@figlanguage{@WLSB}}
\def\cfss@king@@WLSB{\cfssfixbaseline{\cfss@WhiteKingOnWhite}}
\def\cfss@queen@@WLSB{\cfssfixbaseline{\cfss@WhiteQueenOnWhite}}
\def\cfss@rook@@WLSB{\cfssfixbaseline{\cfss@WhiteRookOnWhite}}
\def\cfss@bishop@@WLSB{\cfssfixbaseline{\cfss@WhiteBishopOnWhite}}
\def\cfss@knight@@WLSB{\cfssfixbaseline{\cfss@WhiteKnightOnWhite}}
\def\cfss@pawn@@WLSB{\cfssfixbaseline{\cfss@WhitePawnOnWhite}}
\def\cfss@king@@BLSB{\cfssfixbaseline{\cfss@BlackKingOnWhite}}
\def\cfss@queen@@BLSB{\cfssfixbaseline{\cfss@BlackQueenOnWhite}}
\def\cfss@rook@@BLSB{\cfssfixbaseline{\cfss@BlackRookOnWhite}}
\def\cfss@bishop@@BLSB{\cfssfixbaseline{\cfss@BlackBishopOnWhite}}
\def\cfss@knight@@BLSB{\cfssfixbaseline{\cfss@BlackKnightOnWhite}}
\def\cfss@pawn@@BLSB{\cfssfixbaseline{\cfss@BlackPawnOnWhite}}
%
% https://tex.stackexchange.com/a/312066/46023
\def\instring#1#2{TT\fi\begingroup
  \edef\x{\endgroup\noexpand\in@{#1}{#2}}\x\ifin@}
%
\def\isuppercase#1{%
  \instring{#1}{ABCDEFGHIJKLMNOPRSTUVYZ}%
}%
\makeatother

\def\FirstArgX{text}
\newcommand\skaksymb[2][]{\begingroup%
\def\SecondArgX{#1}%
\ifx\FirstArgX\SecondArgX \usetextfig\textsymfigsymbol{#2}\else%
\if\isuppercase{#2}\textsymfigsymbol{#2}%  \usewhitefig
\else%
\useblackfig\textsymfigsymbol{#2}\fi\fi%
\endgroup}

\begin{document}
\section{Old}
\textsymfigsymbol{K}, \textsymfigsymbol{k},
\begingroup
\usewhitefig\textsymfigsymbol{K}
\useblackfig\textsymfigsymbol{p},  
\textsymfigsymbol{N}
\usewhitefig\textsymfigsymbol{R},
\usetextfig\textsymfigsymbol{R}
\endgroup

\section{New}
\begin{tcblisting}{notitle, sidebyside, boxrule=0.4pt}
\skaksymb{K}, 
\skaksymb{k},
\skaksymb[text]{K}
\end{tcblisting}


\section{In Text}
ABC\skaksymb{K}abc\skaksymb{k}, \skaksymb[text]{k}

{\Huge ABC\skaksymb{K}abc\skaksymb{k}, \skaksymb[text]{k}   }

{\footnotesize ABC\skaksymb{K}abc\skaksymb{k}, \skaksymb[text]{k}}

\section{In chess-annotation}
\newchessgame[id=MyGame] 
\hidemoves{1.e4 e5 2. Nf3 Nc6
3. Bb5 Nf6 4. O-O Nxe4 5.Bxc6 bxc6
6. Kh1 Rg8
}
%\printchessgame[id=MyGame, style=styleCx]

\xskaknewstyleitem[%
template=UF,% a predefined style item
beforewhite={\usewhitefig},
beforeblack={\useblackfig},
afterblack=\color{black}\hspace{1.25ex}
]{myitems}

\xskakaddtostyle[%
font=\normalfont,% <--- he wants something here....
styleitem=myitems
]{test}
%\printchessgame[id=MyGame, style=test]

\begin{tcbitemize}[sharp corners, raster equal height=rows,
colback=white,
raster column skip=0mm,
boxrule=1.2pt, boxsep=1ex, 
]
\tcbitem[left=0pt] \chessboard[]
\tcbitem[] \printchessgame[id=MyGame, style=test]
\end{tcbitemize}
\end{document}

相关内容