绘制棋盘

绘制棋盘

如何绘制具有非常规房屋颜色的棋盘?

我可以画出黑白交替的房子。但是,我无法画出黑白交替的柱子颜色。

答案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}

相关内容