请考虑以下两个示例:
示例 A
\documentclass{article}
\usepackage{xskak}
\begin{document}
\usetextfig
\textsymfigsymbol{R}a1 versus
\usesymfig
\textsymfigsymbol{R}a1
\end{document}
这里,符号风格发生了改变。
示例 B
\documentclass{article}
\usepackage{xskak}
\usesymfig
\setboardfontsize{10pt}
\begin{document}
\textsymfigsymbol{Q} versus
\raisebox{-1.5pt}{\BlackQueenOnWhite}
\end{document}
此处,棋子的颜色发生了改变。
附录
其他针对黑棋的命令是
\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}