Comment puis-je condenser ce code?

Nov 01 2020

C'est beaucoup de lignes, comment puis-je condenser ce code pour qu'il soit plus court? Je voulais juste montrer comment la reine se déplace sur un échiquier.

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

Réponses

16 PhelypeOleinik Nov 01 2020 at 07:03

Avec les arguments clé-valeur, vous n'obtenez généralement rien en définissant une clé plus d'une fois. Il peut y avoir des exceptions, avec des clés qui indiquent des actions plutôt que des paramètres. chessboardLes touches de sont parfois des actions, donc certaines d'entre elles doivent être répétées, mais dans ce cas, la définition de la couleur n'est pas nécessaire, donc vous pouvez supprimer toutes les occurrences de pgfstyle=color,color=green!50, sauf une , car elles sont redondantes.

Ensuite, la recherche colorbackfielddans la chessboarddocumentation fait apparaître :colorbackfields

donc vous êtes à:

\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 a souligné que le paquet a une clé à plusieurs valeurs ici, mais si ce n'était pas le cas (ou comme moi, vous n'avez pas cherché la documentation du paquet), vous pouvez compresser le code simplement en utilisant le codage tex général, par exemple

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

J'ai aussi enlevé framecomme \frameune macro argument, une variante \fboxqui ne semble ici recherché (et ne fonctionne pas comme un environnement) non