Come posso condensare questo codice?

Nov 01 2020

Sono molte righe, come posso condensare questo codice in modo che sia più breve? Volevo solo mostrare come si muove la regina su una scacchiera.

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

Risposte

16 PhelypeOleinik Nov 01 2020 at 07:03

Con gli argomenti chiave-valore, di solito non ottieni nulla impostando una chiave più di una volta. Potrebbero esserci delle eccezioni, con chiavi che denotano azioni piuttosto che impostazioni. chessboardLe chiavi di a volte sono azioni, quindi alcune di esse devono essere ripetute, ma in questo caso impostando il colore, non è necessario, quindi è possibile rimuovere tutte le occorrenze tranne una pgfstyle=color,color=green!50, poiché sono ridondanti.

Quindi, la ricerca colorbackfieldnella chessboarddocumentazione fa apparire :colorbackfields

quindi sei giù 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 ha sottolineato che il pacchetto ha una chiave multivalore qui, ma se non lo avesse fatto (o come me non hai cercato la documentazione del pacchetto) allora puoi comprimere il codice semplicemente usando la codifica tex generale es.

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

Ho anche rimosso framecome \framemacro un argomento, una variante della \fboxquale non sembra desiderata qui (e non funziona come ambiente)