From 9c33bbed101322f4c18de9d2496ea9dc8fff0295 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Sun, 23 Sep 2018 12:26:43 +0200 Subject: [PATCH] Rework chessboard support * Use a module rather than a layout, since this package can be used with any class * Do not hardcode options and settings. The package is very flexible, there is no need to limit this in LyX --- lib/Makefile.am | 2 +- lib/chkconfig.ltx | 3 + lib/examples/chessboard-article.lyx | 278 +++++++++------------------- lib/layouts/chessboard.layout | 133 ------------- lib/layouts/chessboard.module | 139 ++++++++++++++ src/LaTeXFeatures.cpp | 4 +- 6 files changed, 229 insertions(+), 330 deletions(-) delete mode 100644 lib/layouts/chessboard.layout create mode 100644 lib/layouts/chessboard.module diff --git a/lib/Makefile.am b/lib/Makefile.am index fc8f2706b5..3816d5c727 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -2169,7 +2169,7 @@ dist_layouts_DATA =\ layouts/bxjsslide.layout \ layouts/changebars.module \ layouts/chess.layout \ - layouts/chessboard.layout \ + layouts/chessboard.module \ layouts/cl2emult.layout \ layouts/copernicus.layout \ layouts/ctex-article.layout \ diff --git a/lib/chkconfig.ltx b/lib/chkconfig.ltx index 7c8b669bcf..8abcc53c3f 100644 --- a/lib/chkconfig.ltx +++ b/lib/chkconfig.ltx @@ -297,6 +297,8 @@ \TestPackage{cancel} \TestPackage{chapterbib} \TestPackage{chemgreek} +\TestPackage{chessboard} +\TestPackage{chessfss} \TestPackage{chicago} \TestPackage{color} % this one should be there if graphics.sty is there. \TestPackage{covington} @@ -397,6 +399,7 @@ \TestPackage[xetex.def]{xetex-def} \TestPackage{xkeyval} \TestPackage{xltabular} +\TestPackage{xskak} % required by chessboard % Packages used by LyX's documentation files \TestPackage{arydshln} diff --git a/lib/examples/chessboard-article.lyx b/lib/examples/chessboard-article.lyx index aad0c85f8b..6ab13e4b56 100644 --- a/lib/examples/chessboard-article.lyx +++ b/lib/examples/chessboard-article.lyx @@ -1,17 +1,22 @@ #LyX 2.4 created this file. For more info see https://www.lyx.org/ -\lyxformat 563 +\lyxformat 564 \begin_document \begin_header \save_transient_properties true \origin /systemlyxdir/examples/ -\textclass chessboard +\textclass article \begin_preamble -\usepackage{multicol} +\AtBeginDocument{% \columnsep 0.25in \columnseprule 0.4pt \hyphenpenalty 10000 +} \end_preamble \use_default_options true +\begin_modules +chessboard +multicol +\end_modules \maintain_unincluded_children false \language english \language_package default @@ -51,10 +56,9 @@ \use_package stackrel 1 \use_package stmaryrd 1 \use_package undertilde 1 -\cite_engine biblatex-natbib -\cite_engine_type authoryear -\biblatex_bibstyle authoryear -\biblatex_citestyle authoryear +\cite_engine basic +\cite_engine_type default +\biblio_style plain \use_bibtopic false \use_indices false \paperorientation portrait @@ -72,14 +76,14 @@ \secnumdepth 3 \tocdepth 3 \paragraph_separation skip -\defskip medskip +\defskip smallskip \is_math_indent 0 \math_numbering_side default \quotes_style english \dynamic_quotes 0 \papercolumns 1 \papersides 1 -\paperpagestyle default +\paperpagestyle empty \tracking_changes false \output_changes false \html_math_output 0 @@ -116,37 +120,25 @@ Game start 05/29/2001 \end_layout \begin_layout Standard -\begin_inset ERT -status collapsed +\begin_inset Flex Multiple Columns +status open \begin_layout Plain Layout - - -\backslash -begin{multicols}{2} -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard The following game was played at the IECC (International Email Chess Club). It is presented as an example of the fun you can have with \SpecialChar LyX 's new chessboard - layout (based on the -\begin_inset Quotes eld -\end_inset - -xskak.sty -\begin_inset Quotes erd -\end_inset - - package from CTAN + module (using the +\family sans +xskak +\family default + and +\family sans +chessboard +\family default + packages). \end_layout -\begin_layout Standard +\begin_layout Plain Layout \begin_inset CommandInset line LatexCommand rule offset "0.5ex" @@ -158,14 +150,14 @@ height "1pt" \end_layout -\begin_layout Standard +\begin_layout Plain Layout \noun on Sylvan, Kayvan \begin_inset space \hfill{} \end_inset -Wakeham, Marc +Wakeham, Marc \noun default \begin_inset Newline newline @@ -175,10 +167,10 @@ Wakeham, Marc \begin_inset space \hfill{} \end_inset - (1639) +(1639) \end_layout -\begin_layout Standard +\begin_layout Plain Layout \noindent \begin_inset CommandInset line LatexCommand rule @@ -191,7 +183,24 @@ height "1pt" \end_layout -\begin_layout Standard +\begin_layout NewChessGame + +\end_layout + +\begin_layout Plain Layout +\begin_inset Flex SetChessBoard +status open + +\begin_layout Plain Layout +pgfstyle=straightmove,arrow=to,linewidth=0.1em,smallboard +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Plain Layout \begin_inset Flex Mainline status open @@ -207,12 +216,6 @@ outvar \end_inset - -\begin_inset Argument 2 -status open - -\begin_layout Plain Layout - 1. e4 c5 2. Nc3 d6 3. @@ -226,57 +229,35 @@ status open \end_layout -\end_inset - - -\end_layout - -\begin_layout Standard +\begin_layout ChessBoard \noindent \align center \begin_inset Flex ChessBoard status open \begin_layout Plain Layout +\noindent +\align center \begin_inset Argument 1 status open \begin_layout Plain Layout -d2-d4 +markmoves={d2-d4},pgfstyle=knightmove,markmove={g1-e2},pgfstyle=circle,markfield +s={d4,f4} \end_layout \end_inset -\begin_inset Argument 3 -status open +\end_layout + +\end_inset + + +\end_layout \begin_layout Plain Layout -d4,f4 -\end_layout - -\end_inset - - -\begin_inset Argument 2 -status open - -\begin_layout Plain Layout -g1-e2 -\end_layout - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard \noindent \align block So far, so good. @@ -285,13 +266,8 @@ So far, so good. The diagrammed position has been reached before in hundreds of GM games. \end_layout -\begin_layout Standard -\begin_inset Flex Mainline -status open - \begin_layout Plain Layout - -\begin_inset Argument 2 +\begin_inset Flex Mainline status open \begin_layout Plain Layout @@ -305,12 +281,7 @@ status open \end_layout -\end_inset - - -\end_layout - -\begin_layout Standard +\begin_layout Plain Layout \noindent \align block \begin_inset Flex Variation @@ -328,20 +299,9 @@ invar \end_inset - -\begin_inset Argument 2 -status open - -\begin_layout Plain Layout - 5... Ng7 -\end_layout - -\end_inset - - -\begin_inset Argument 3 +\begin_inset Argument post:1 status open \begin_layout Plain Layout @@ -361,7 +321,7 @@ equal{} was better \end_layout -\begin_layout Standard +\begin_layout Plain Layout \begin_inset Flex Mainline status open @@ -377,12 +337,6 @@ outvar \end_inset - -\begin_inset Argument 2 -status open - -\begin_layout Plain Layout - 6. d4 cxd4 7. Nxd4 a6 @@ -393,21 +347,16 @@ status open \end_layout -\end_inset - - -\end_layout - -\begin_layout Standard +\begin_layout Plain Layout With 7... a6, we are back in the well-trodden theory of this opening. \end_layout -\begin_layout Standard +\begin_layout Plain Layout \noindent \align center \begin_inset Flex ChessBoard -status open +status collapsed \begin_layout Plain Layout @@ -418,13 +367,8 @@ status open \end_layout -\begin_layout Standard -\begin_inset Flex Mainline -status open - \begin_layout Plain Layout - -\begin_inset Argument 2 +\begin_inset Flex Mainline status open \begin_layout Plain Layout @@ -442,24 +386,21 @@ status open \end_layout -\end_inset - - -\end_layout - -\begin_layout Standard +\begin_layout ChessBoard \noindent \align center \begin_inset Flex ChessBoard status open \begin_layout Plain Layout +\noindent +\align center \begin_inset Argument 1 status open \begin_layout Plain Layout -a1-d1 +markmoves={a1-d1} \end_layout \end_inset @@ -472,29 +413,19 @@ a1-d1 \end_layout -\begin_layout Standard +\begin_layout Plain Layout White continues to develop pieces and also sets a trap for Black. \end_layout -\begin_layout Standard +\begin_layout Plain Layout \begin_inset Flex Mainline status open \begin_layout Plain Layout -\begin_inset Argument 2 -status open - -\begin_layout Plain Layout - 12... - O-O? -\end_layout - -\end_inset - - -\begin_inset Argument 3 + O-O? +\begin_inset Argument post:1 status open \begin_layout Plain Layout @@ -512,11 +443,11 @@ This move loses instantly. \end_layout -\begin_layout Standard +\begin_layout Plain Layout The following was better, even though white retains the upper hand. \end_layout -\begin_layout Standard +\begin_layout Plain Layout \begin_inset Flex Variation status open @@ -532,22 +463,11 @@ invar \end_inset - -\begin_inset Argument 2 -status open - -\begin_layout Plain Layout - 12... e5 13. Be3 Qc7 14. Na4 O-O -\end_layout - -\end_inset - - -\begin_inset Argument 3 +\begin_inset Argument post:1 status open \begin_layout Plain Layout @@ -567,7 +487,7 @@ wbetter \end_layout -\begin_layout Standard +\begin_layout Plain Layout \begin_inset Flex Mainline status open @@ -583,12 +503,6 @@ outvar \end_inset - -\begin_inset Argument 2 -status open - -\begin_layout Plain Layout - 13. e5! \end_layout @@ -598,23 +512,13 @@ status open \end_layout -\end_inset - - -\end_layout - -\begin_layout Standard +\begin_layout Plain Layout Black's knight and bishop form a bumbling pair here. The bishop is doomed. \end_layout -\begin_layout Standard -\begin_inset Flex Mainline -status open - \begin_layout Plain Layout - -\begin_inset Argument 2 +\begin_inset Flex Mainline status open \begin_layout Plain Layout @@ -626,12 +530,7 @@ status open Bxd6 Rfd8 17. Bc7 Rd7 18. Bf4 -\end_layout - -\end_inset - - -\begin_inset Argument 3 +\begin_inset Argument post:1 status open \begin_layout Plain Layout @@ -649,11 +548,11 @@ status open \end_layout -\begin_layout Standard +\begin_layout Plain Layout \noindent \align center \begin_inset Flex ChessBoard -status open +status collapsed \begin_layout Plain Layout @@ -664,17 +563,6 @@ status open \end_layout -\begin_layout Standard -\begin_inset ERT -status collapsed - -\begin_layout Plain Layout - - -\backslash -end{multicols} -\end_layout - \end_inset diff --git a/lib/layouts/chessboard.layout b/lib/layouts/chessboard.layout deleted file mode 100644 index a92ab7485c..0000000000 --- a/lib/layouts/chessboard.layout +++ /dev/null @@ -1,133 +0,0 @@ -#% Do not delete the line below; configure depends on this -# \DeclareLaTeXClass[scrartcl]{Chessboard} -# \DeclareCategory{Articles} -# chessboard article textclass definition file. - -Format 69 - -Requires chessfss - -ClassOptions - Other "parskip" -End - -Preamble - \usepackage{xskak} - \pagestyle{empty} - \AtBeginDocument{ - \newchessgame - \setchessboard{pgfstyle=straightmove, arrow=to,linewidth=0.1em, smallboard} - } -EndPreamble - -Style Standard - Align Block - AlignPossible Block, Left, Right, Center -End - -Input stdsections.inc -Input stdtitle.inc - -InsetLayout Flex:Mainline - LyXType custom - LatexType Command - LatexName mainline - Decoration Classic - LabelString "Mainline:" - PassThru 1 - ParbreakIsNewline 1 - LabelFont - Color blue - Series bold - EndFont - Font - Color blue - EndFont - Argument 1 - LabelString id - ToolTip "'invar' or 'outvar'" - Decoration Conglomerate - EndArgument - Argument 2 - Mandatory 1 - LabelString "Moves" - PassThru 1 - Decoration Conglomerate - EndArgument - Argument 3 - LabelString "Comment" - Mandatory 1 - LeftDelim "{ " - Font - Color Green - EndFont - Decoration Conglomerate - EndArgument -End - -InsetLayout Flex:Variation - CopyStyle Flex:Mainline - LatexName variation - LabelString Variation -End - -InsetLayout Flex:ChessBoard - LyXType custom - LatexType Command - LatexName chessboard - LabelString "[chessboard]" - Decoration Classic - KeepEmpty 1 - LabelFont - Color Red - EndFont - Argument 1 - LabelString "Arrows" - ToolTip "Comma separated list of the form from-to (like d2-d4)" - LeftDelim "[pgfstyle=straightmove,markmoves={" - RightDelim "}," - DefaultArg " " - PassThru 1 - Decoration Conglomerate - EndArgument - Argument 2 - LabelString "Knigt" - ToolTip "List of knight moves (crooked arrows) g1-e2, g1-h3" - LeftDelim "pgfstyle=knightmove,markmove={" - RightDelim "}," - Decoration Conglomerate - EndArgument - Argument 3 - LabelString "Mark" - ToolTip "Comma separated list of fields to be marked with a circle (like d4,f4,c7)" - DefaultArg " " - LeftDelim "pgfstyle=circle,markfields={" - RightDelim "}]" - Decoration Conglomerate - EndArgument -End - -InsetLayout Flex:ChessBoardStore - CopyStyle Flex:ChessBoard - ResetArgs 1 - LabelString "StoreChessboard" - Argument 1 - LabelString "Store FEN" - ToolTip "Store the 'FEN' under the given name" - LeftDelim "[print=false,storefen={" - RightDelim "}]" - EndArgument -End - -InsetLayout Flex:ChessBoardRestore - CopyStyle Flex:ChessBoard - ResetArgs 1 - LabelString "RestoreChessboard" - Argument 1 - LabelString "Restore FEN" - ToolTip "Restore the 'FEN' to the version saved under the given name" - LeftDelim "[print=false,restorefen={" - RightDelim "}]" - EndArgument -End - diff --git a/lib/layouts/chessboard.module b/lib/layouts/chessboard.module new file mode 100644 index 0000000000..13810300c8 --- /dev/null +++ b/lib/layouts/chessboard.module @@ -0,0 +1,139 @@ +#\DeclareLyXModule[chessboard.sty,chessfss.sty,xskak.sty]{Chessboard} +#DescriptionBegin +#Support for the chessboard package to print chess games +#See chessboard-article.lyx example file. +#DescriptionEnd +# Author: Kornel Benko +# Jürgen Spitzmüller + +Format 69 + +# +# XSkak basics +# + +Style NewChessGame + LatexType command + LatexName newchessgame + Margin Dynamic + LabelType Static + LabelSep XX + LabelString "[Start New Chess Game]" + LabelFont + Family typewriter + Series Medium + Size Normal + Color red + EndFont + KeepEmpty 1 + Argument 1 + LabelString "Options" + MenuString "Chessgame Options" + ToolTip "See xskak manual for a comprehensive list of keys and values" + PassThru 1 + Font + Color latex + Family typewriter + EndFont + EndArgument + Requires xskak +End + + +InsetLayout Flex:Mainline + LyXType custom + LatexType command + LatexName mainline + Decoration classic + LabelString "Mainline:" + PassThru 1 + ParbreakIsNewline 1 + LabelFont + Color blue + EndFont + Font + Color blue + EndFont + Argument 1 + LabelString "Options" + MenuString "Mainline Options" + ToolTip "See xskak manual for possible options" + Font + Color latex + Family typewriter + EndFont + EndArgument + Argument post:1 + LabelString "Comment" + MenuString "Comment" + LeftDelim "
" + RightDelim "%" + Font + Color green + EndFont + EndArgument + Requires xskak +End + +InsetLayout Flex:Variation + CopyStyle Flex:Mainline + LatexName variation + LabelString Variation +End + + +# +# Chessboard additions +# + +InsetLayout Flex:SetChessBoard + LyxType custom + Decoration classic + LatexType command + LatexName setchessboard + LabelString "Global Chessboard Settings" + Font + Color latex + Family typewriter + EndFont + LabelFont + Color blue + EndFont + Requires chessboard +End + + +InsetLayout Flex:SetBoardStoreStyle + CopyStyle Flex:SetChessBoard + LabelString "Set Chessboard Style" + Argument 1 + Mandatory true + LabelString "Style Name" + MenuString "Chessboard Style Name" + ToolTip "Here you can store chessboard settings under a style name for later reuse. See chessboard manual for details." + AutoInsert true + Decoration conglomerate + EndArgument +End + + +InsetLayout Flex:ChessBoard + LyxType custom + Decoration classic + LatexType command + LatexType command + LatexName chessboard + LabelString "Chessboard" + Argument 1 + LabelString "Options" + MenuString "Chessboard Options" + ToolTip "See chessboard manual for a comprehensive list of keys and values" + PassThru 1 + Font + Color latex + Family typewriter + EndFont + EndArgument + Requires chessboard +End + diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index c78e735730..eb31dbab66 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -999,7 +999,9 @@ char const * simplefeatures[] = { "tablefootnote", "afterpage", "tabularx", - "xltabular" + "xltabular", + "chessboard", + "xskak" }; char const * bibliofeatures[] = {