我怎样才能压缩此代码?

我怎样才能压缩此代码?

这代码太多了,我该如何压缩代码让它更短?我只是想展示棋盘上的皇后是如何移动的。

\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它的变体似乎在这里不需要(并且不能作为环境工作)

相关内容