Come posso condensare questo codice?
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
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}
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)