如何绘制具有非常规房屋颜色的棋盘?
我可以画出黑白交替的房子。但是,我无法画出黑白交替的柱子颜色。
答案1
您可以使用棋盘包裹。
\documentclass{article}
\usepackage{chessboard}
\usepackage{skak}
\begin{document}
\setchessboard{showmover=false}
\newgame
\chessboard
\end{document}
而且您可以根据需要个性化您的棋盘。例如(如果我正确理解了您想要实现的目标):
\documentclass{article}
\usepackage[LSBC3,T1]{fontenc}
\usepackage{chessboard}
\usepackage{skak}
\usepackage{color}
\begin{document}
\setboardfontencoding{LSBC3}
\setchessboard{showmover=false}
\newgame
\chessboard[
coloremph,
fieldmaskcolor=red,
fieldcolor=red,
emphareas={a1-a8,c1-c8,e1-e8,g1-g8},
coloremph,
fieldmaskcolor=white,
fieldcolor=white,
emphareas={b1-b8,d1-d8,f1-f8,h1-h8}]
\end{document}
或者更奇怪的配置:
\documentclass{article}
\usepackage[LSBC3,T1]{fontenc}
\usepackage{chessboard}
\usepackage{skak}
\usepackage{color}
\begin{document}
\setboardfontencoding{LSBC3}
\setchessboard{showmover=false}
\newgame
\chessboard[
coloremph,
fieldmaskcolor=red,
fieldcolor=red,
emphareas={a8-b7,c3-c5,e4-e7,f7-g7,g1-h3},
coloremph,
fieldmaskcolor=white,
fieldcolor=white,
emphareas={a1-b6,c6-d8,c1-d2,d3-d5,e8-h8,e1-f3,f4-h6}]
\end{document}
答案2
使用 PSTricks
\documentclass[pstricks]{standalone}
\psset{linecolor=brown}
\begin{document}
\begin{pspicture}(8,8)
\multips(0,0)(0,2){4}{%
\multips(0,0)(2,0){4}{%
\psframe*(1,1)\psframe*(1,1)(2,2)}}
\end{pspicture}
\end{document}
算法
下面的动画展示了生成棋盘的算法。
没有 PSTricks
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[x=1cm]
\foreach \y in {0,2,...,6}{
\foreach \x in {0,2,...,6}{
\fill (\x,\y) rectangle (1+\x,1+\y) rectangle (2+\x,2+\y);}}
\end{tikzpicture}
\end{document}
由于输出在视觉上是相同的,我认为我不需要再次重新显示它。
答案3
由于问题包含文本“房子的颜色非常规”,我假设您需要控制要应用的颜色以及棋盘的大小和行/列数。以下允许您这样做;您可以轻松绘制常规棋盘,但您也可以根据需要轻松制作非常规图案。
\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{keyval}
\def\Side{\ChessSide}
\newcommand\ChessBoxA{%
{\fboxsep=0pt\fbox{\color{\ChessColori}\rule{\Side}{\Side}}}}
\newcommand\ChessBoxB{%
{\fboxsep=0pt\fbox{\color{\ChessColorii}\rule{\Side}{\Side}}}}
\makeatletter
\newcommand\Row[1]{%
\par\nobreak\nointerlineskip\vskip-\fboxrule%
\@tfor\@tempa:=#1 \do {\csname ChessBox\@tempa\endcsname\kern-\fboxrule}}
\define@key{chessB}{side}{\def\ChessSide{#1}}
\define@key{chessB}{colori}{\def\ChessColori{#1}}
\define@key{chessB}{colorii}{\def\ChessColorii{#1}}
\setkeys{chessB}{
side=1.5em,
colori=black!70,
colorii=white}
\makeatother
\newcommand\Conventional[1][]{%
\begin{Chessboard}[#1]
\Row{B,A,B,A,B,A,B,A}
\Row{A,B,A,B,A,B,A.B}
\Row{B,A,B,A,B,A,B,A}
\Row{A,B,A,B,A,B,A.B}
\Row{B,A,B,A,B,A,B,A}
\Row{A,B,A,B,A,B,A.B}
\Row{B,A,B,A,B,A,B,A}
\Row{A,B,A,B,A,B,A.B}
\end{Chessboard}%
}
\newenvironment{Chessboard}[1][]
{\setkeys{chessB}{#1}%
\par\medskip\setlength\parindent{0pt}}
{\par\medskip}
\begin{document}
\Conventional
\Conventional[side=10pt,colori=Bittersweet]
\begin{Chessboard}
\Row{B,A,B,A,A,B}
\Row{A,A,B,A,B,B}
\Row{B,A,B,A,B,B}
\Row{A,A,B,B,A,B}
\Row{B,A,B,A,B,B}
\Row{A,A,A,A,B,A}
\end{Chessboard}
\begin{Chessboard}[side=0.8em,colori=MidnightBlue,colorii=Dandelion]
\Row{A,A,B,B}
\Row{A,A,B,B}
\Row{B,B,A,A}
\Row{B,B,A,A}
\end{Chessboard}
\begin{Chessboard}[side=1.2cm,colori=Maroon,colorii=ForestGreen]
\Row{A,A,B,B,A}
\Row{A,B,B,B,A}
\Row{A,B,B,A,A}
\Row{B,B,A,A,B}
\Row{B,B,B,A,B}
\end{Chessboard}
\end{document}
在本例中,一个简单的 key=value 机制允许控制每个方块的边,以及用于生成图案的两种颜色。键为side
(default= 1.5em
)、colori
(default= black!70
) 和colorii
(default= white
)。
\Conventional
绘制传统棋盘;使用可选参数您可以将选项传递给这个传统棋盘。
棋盘环境允许您拥有不同的图案;在这个环境中,您可以使用命令\Row
来指定每一行;强制参数是一个以逗号分隔的字符“A”和“B”列表,它们对应于该行要使用的颜色;例如,使用默认设置,
\begin{Chessboard}
\Row{B,A,B,A,A,B}
\end{Chessboard}
生产
答案4
如果您用一个循环绘制所有正方形边,那么您就可以指示为棋盘上色:要上色的正方形将被自动选中。
\begin{center}
\begin{tikzpicture}[x=6mm,y=6mm]
\draw[fill=black!30,even odd rule] (0,0)
foreach \n in {1,2,3,4} { -- ++ (8,0) -- ++ (0,1) -- ++ (-8,0) -- ++ (0,1) } -- (8,8)
foreach \n in {1,2,3,4} { -- ++ (0,-8) -- ++ (-1,0) -- ++ (0,8) -- ++ (-1,0) } -- cycle
foreach[count=\n] \m in {A,B,...,H} { (-0.4,\n-0.5) node {\n} (\n-0.5,-0.5) node {\m} };
\end{tikzpicture}
\end{center}