¿Cómo puedo condensar este código?

Nov 01 2020

Son muchas líneas, ¿cómo puedo condensar este código para que sea más corto? Solo quería mostrar cómo se mueve la reina en un tablero de ajedrez.

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

Respuestas

16 PhelypeOleinik Nov 01 2020 at 07:03

Con los argumentos clave-valor, normalmente no obtiene nada al configurar una clave más de una vez. Puede haber excepciones, con claves que denotan acciones en lugar de configuraciones. chessboardLas claves de a veces son acciones, por lo que algunas de ellas deben repetirse, pero en este caso, establecer el color no es necesario, por lo que puede eliminar todas las apariciones menos una pgfstyle=color,color=green!50, ya que son redundantes.

Luego, al buscar colorbackfielden la chessboarddocumentación aparece :colorbackfields

entonces estás listo para:

\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 señaló que el paquete tiene una clave de varios valores aquí, pero si no la tenía (o como yo, no buscó la documentación del paquete), puede comprimir el código simplemente usando la codificación tex general, por ejemplo

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

También eliminé framecomo \framees una macro de un argumento, una variante de la \fboxcual no parece deseada aquí (y no funciona como entorno)