Como posso condensar este código?

Nov 01 2020

São muitas linhas, como posso condensar esse código para que fique mais curto? Eu só queria mostrar como a rainha se move em um tabuleiro de xadrez.

\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}

Respostas

16 PhelypeOleinik Nov 01 2020 at 07:03

Com argumentos de valor-chave, você geralmente não obtém nada definindo uma chave mais de uma vez. Pode haver exceções, com chaves que denotam ações em vez de configurações. chessboardAs teclas de às vezes são ações, então algumas delas precisam ser repetidas, mas, neste caso, definindo a cor, você não precisa disso, portanto, pode remover todas as ocorrências de pgfstyle=color,color=green!50, exceto uma , pois são redundantes.

Então, pesquisar colorbackfieldna chessboarddocumentação traz :colorbackfields

então você está reduzido a:

\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}

10 DavidCarlisle Nov 01 2020 at 07:39

Phelype apontou que o pacote tem uma chave de valor múltiplo aqui, mas se não tivesse (ou, como eu, você não procurou a documentação do pacote), você pode compactar o código apenas usando a codificação tex geral, por exemplo

\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}

Eu também removi framecomo \frameé uma macro de um argumento, uma variante da \fboxqual não parece desejada aqui (e não funciona como um ambiente)