这代码太多了,我该如何压缩代码让它更短?我只是想展示棋盘上的皇后是如何移动的。
\documentclass[12pt]{book}
\usepackage{skak} %or xskak
\usepackage{chessboard}
% https://tex.stackexchange.com/questions/215330/chess-notation-with-skak-how-to-highlight-squares
\begin{document}
\begin{frame}
\newgame
\chessboard[setfen=8/8/8/8/3Q4/8/8/8/8 w - - 0 0,
% pgfstyle=border,markfields={d4,d6},
color=green!50,
colorbackfield=c5,
pgfstyle=color,
color=green!50,
colorbackfield=b6,
pgfstyle=color,
color=green!50,
colorbackfield=a7,
pgfstyle=color,
color=green!50,
colorbackfield=e3,
pgfstyle=color,
color=green!50,
colorbackfield=f2,
pgfstyle=color,
color=green!50,
colorbackfield=g1,
pgfstyle=color,
color=green!50,
colorbackfield=d1,
pgfstyle=color,
color=green!50,
colorbackfield=d2,
pgfstyle=color,
color=green!50,
colorbackfield=d3,
pgfstyle=color,
color=green!50,
colorbackfield=d5,
pgfstyle=color,
color=green!50,
colorbackfield=d6,
pgfstyle=color,
color=green!50,
colorbackfield=d7,
pgfstyle=color,
color=green!50,
colorbackfield=d8,
pgfstyle=color,
color=green!50,
colorbackfield=c3,
pgfstyle=color,
color=green!50,
colorbackfield=c4,
pgfstyle=color,
color=green!50,
colorbackfield=e4,
pgfstyle=color,
color=green!50,
colorbackfield=e5,
pgfstyle=color,
color=green!50,
colorbackfield=a1,
pgfstyle=color,
color=green!50,
colorbackfield=b2,
pgfstyle=color,
color=green!50,
colorbackfield=f6,
pgfstyle=color,
color=green!50,
colorbackfield=g7,
pgfstyle=color,
color=green!50,
colorbackfield=h8,
pgfstyle=color,
color=green!50,
colorbackfield=a4,
pgfstyle=color,
color=green!50,
colorbackfield=b4,
pgfstyle=color,
color=green!50,
colorbackfield=f4,
pgfstyle=color,
color=green!50,
colorbackfield=g4,
pgfstyle=color,
color=green!50,
colorbackfield=h4,
pgfstyle=color,
% opacity=0.5,
% color=red,
%markfield={d5}
]
\end{frame}
\end{document}
答案1
使用键值参数,你可以通常不要通过多次设置一个键来获得任何东西。可能会有例外,键表示行动而不是设置。 chessboard
的键有时是动作,因此其中一些必须重复,但在这种情况下设置颜色,你不需要这样做,所以你可以删除除了一个出现之外的所有pgfstyle=color,color=green!50
,因为它们是多余的。
colorbackfield
然后,在文档中搜索chessboard
会出现:colorbackfields
因此你需要:
\documentclass{book}
\usepackage{xskak}
\begin{document}
\newgame
\chessboard[
setfen=8/8/8/8/3Q4/8/8/8/8 w - - 0 0,
color=green!50,
colorbackfields={c5,b6,a7,e3,f2,g1,d1,d2,d3,d5,d6,d7,d8,c3,
c4,e4,e5,a1,b2,f6,g7,h8,a4,b4,f4,g4,h4},
pgfstyle=color
]
\end{document}
答案2
Phelype 指出,这里的包有一个多值键,但如果没有(或者像我一样,你没有查找包文档),那么你可以使用一般的 tex 编码来压缩代码,例如
\documentclass[12pt]{book}
\usepackage{skak,chessboard}
\def\z#1#2{\ifx.#1\else colorbackfield=#1#2,\expandafter\z\fi}
\begin{document}
\newgame
\expanded{\noexpand\chessboard[
setfen=8/8/8/8/3Q4/8/8/8/8 w - - 0 0,
pgfstyle=color,color=green!50,
\z c5b6a7e3f2g1d1d2d3d5d6d7d8c3c4e4e5a1b2f6g7h8a4b4f4g4h4..
]}
\end{document}
我还删除了frame
一个\frame
参数宏,\fbox
它的变体似乎在这里不需要(并且不能作为环境工作)