昔、作った LaTeX での 盤面表示 (承前)

前回は、サワリだけだったが、コンパイル出来るものを載せておこう。
昔のママなのですこしく改良は必要だ。

盤面は、2種類用意してあるようだ。
また、持駒の表示は \shortstack を使い簡潔に行っている。
縦中横は  \moti{P{18}} とする。

picture 環境を使っているので、描画の方法は、

\put(\thesuji,#2){\makebox(11,12){\sgtrans{\templist}}}%

なので、風さんのとそっくりだ。

\documentclass[twoside]{jbook}
\usepackage{multicol}
\usepackage{graphicx}

\textwidth=18cm
\textheight=25.5cm
%\textwidth=26cm
%\textheight=18cm
\setlength{\xkanjiskip}{0zw}
\oddsidemargin=-0.5cm
\evensidemargin=-1.5cm
\topmargin=-2.0cm
\renewcommand{\baselinestretch}{0.9}


\newcommand{\king}{\rotatebox[origin=c]{180}{玉}}
\newcommand{\rook}{\rotatebox[origin=c]{180}{飛}}
\newcommand{\dragon}{\rotatebox[origin=c]{180}{龍}}
\newcommand{\bishop}{\rotatebox[origin=c]{180}{角}}
\newcommand{\ma}{\rotatebox[origin=c]{180}{馬}}
\newcommand{\gold}{\rotatebox[origin=c]{180}{金}}
\newcommand{\silver}{\rotatebox[origin=c]{180}{銀}}
\newcommand{\prsilver}{\rotatebox[origin=c]{180}{全}}
\newcommand{\knight}{\rotatebox[origin=c]{180}{桂}}
\newcommand{\prknight}{\rotatebox[origin=c]{180}{圭}}
\newcommand{\lancer}{\rotatebox[origin=c]{180}{香}}
\newcommand{\prlancer}{\rotatebox[origin=c]{180}{杏}}
\newcommand{\pawn}{\rotatebox[origin=c]{180}{歩}}
\newcommand{\tokin}{\rotatebox[origin=c]{180}{と}}
\newcommand{\King}{玉}
\newcommand{\Rook}{飛}
\newcommand{\Dragon}{龍}
\newcommand{\Bishop}{角}
\newcommand{\Ma}{馬}
\newcommand{\Gold}{金}
\newcommand{\Silver}{銀}
\newcommand{\PrSilver}{全}
\newcommand{\Knight}{桂}
\newcommand{\PrKnight}{圭}
\newcommand{\Lancer}{香}
\newcommand{\PrLancer}{杏}
\newcommand{\Pawn}{歩}
\newcommand{\Tokin}{と}
\newcommand{\Space}{ }

\newcommand{\sgtrans}[1]{%
\if#1-\Space \fi%
\if#1k\king \fi%
\if#1r\rook \fi%
\if#1b\bishop \fi%
\if#1g\gold \fi%
\if#1s\silver \fi%
\if#1n\knight \fi%
\if#1l\lancer \fi%
\if#1p\pawn \fi%
\if#1d\dragon \fi%
\if#1m\ma \fi%
\if#1z\prsilver \fi%
\if#1y\prknight\fi%
\if#1x\prlancer \fi%
\if#1t\tokin \fi%
\if#1K\King \fi%
\if#1R\Rook \fi%
\if#1B\Bishop \fi%
\if#1G\Gold \fi%
\if#1S\Silver \fi%
\if#1N\Knight \fi%
\if#1L\Lancer \fi%
\if#1P\Pawn \fi%
\if#1D\Dragon \fi%
\if#1M\Ma \fi%
\if#1Z\PrSilver \fi%
\if#1Y\PrKnight\fi%
\if#1X\PrLancer \fi%
\if#1T\Tokin \fi%
}

\makeatletter


\newcounter{suji}
\newcommand{\sgd}[2]{%
\setcounter{suji}{0}%
\expandafter\@tfor\expandafter\templist\expandafter:\expandafter=#1%
\do{%
\put(\thesuji,#2){\makebox(11,12){\sgtrans{\templist}}}%
\addtocounter{suji}{11}%
}}%



\newcommand{\transmoti}[1]{%
\if#1P\Pawn%
\else \if#1L\Lancer%
\else \if#1N\Knight%
\else \if#1S\Silver%
\else \if#1G\Gold%
\else \if#1R\Rook%
\else \if#1B\Bishop%
\else #1%
\fi\fi\fi\fi\fi\fi\fi%
}


\newcommand{\sgm}[1]{%
\expandafter\@tfor\expandafter\tlist\expandafter:\expandafter=#1%
\do{%
\transmoti{\tlist}\\%
}}%


\newcommand{\sgb}[9]{%
\fontsize{14pt}{14pt}
\selectfont
\sgd{#1}{96}%
\sgd{#2}{84}%
\sgd{#3}{72}%
\sgd{#4}{60}%
\sgd{#5}{48}%
\sgd{#6}{36}%
\sgd{#7}{24}%
\sgd{#8}{12}%
\sgd{#9}{0}%
}


\newcommand{\moti}[1]{%
\fontsize{12pt}{12pt}
\selectfont
\put(101,0){\shortstack{\sgm{#1}}}%
}%

\newcommand{\sgframe}{%
\thicklines
\put(0,0){\framebox(99,108){}}
\thinlines
\multiput(11,0)(11,0){8}{\line(0,1){108}}
\multiput(0,12)(0,12){8}{\line(1,0){99}}
}

\newcommand{\sgdsmall}[2]{%
\setcounter{suji}{0}%
\expandafter\@tfor\expandafter\templist\expandafter:\expandafter=#1%
\do{%
\put(\thesuji,#2){\makebox(8,9){\sgtrans{\templist}}}%
\addtocounter{suji}{8}%
}}%

\newcommand{\sgbsmall}[9]{%
\fontsize{8pt}{8pt}
\selectfont
\sgdsmall{#1}{63}%
\sgdsmall{#2}{55}%
\sgdsmall{#3}{47}%
\sgdsmall{#4}{39}%
\sgdsmall{#5}{31}%
\sgdsmall{#6}{23}%
\sgdsmall{#7}{15}%
\sgdsmall{#8}{7}%
\sgdsmall{#9}{-1}%
}


\newcommand{\motismall}[1]{%
\fontsize{7pt}{7pt}
\selectfont
\put(73,0){\shortstack{\sgm{#1}}}%
}%

\newcommand{\sgframesmall}{%
\thicklines
\put(0,0){\framebox(72,72){}}
\thinlines
\multiput(8,0)(8,0){8}{\line(0,1){72}}
\multiput(0,8)(0,8){8}{\line(1,0){72}}
}


\makeatother%




\begin{document}
%\small 
\setlength{\unitlength}{0.45mm}
\begin{picture}(120,120)
\sgframe
\sgb
{-------z-}
{-L-tzzz-t}
{-pP----pt}
{kPt-PPPPt}
{tNTTN--Tx}
{gTG--m-N-}
{Ng-------}
{--D----L-}
{--L-MGR--}
\moti{なし}
\end{picture}
\end{document}
スポンサーサイト



昔、作った LaTeX での 盤面表示

昔のファイルを探していたら、こんなのが出てきた。

LaTeX での 盤面表示を研究していた時のモノ。

こんな図面が

20230306-1.jpg

こんなソースで表現できる。駒の略号は suiho のものを流用している。

\begin{picture}(120,120)
\sgframe
\sgb
{-------z-}
{-L-tzzz-t}
{-pP----pt}
{kPt-PPPPt}
{tNTTN--Tx}
{gTG--m-N-}
{Ng-------}
{--D----L-}
{--L-MGR--}
\moti{なし}
\end{picture}

ちなみに、\sgb は以下の通りで、 \sgd を呼び出している。

\newcommand{\sgb}[9]{%
\fontsize{14pt}{14pt}
\selectfont
\sgd{#1}{96}%
\sgd{#2}{84}%
\sgd{#3}{72}%
\sgd{#4}{60}%
\sgd{#5}{48}%
\sgd{#6}{36}%
\sgd{#7}{24}%
\sgd{#8}{12}%
\sgd{#9}{0}%
}

\sgd は以下の通り

\newcounter{suji}
\newcommand{\sgd}[2]{%
\setcounter{suji}{0}%
\expandafter\@tfor\expandafter\templist\expandafter:\expandafter=#1%
\do{%
\put(\thesuji,#2){\makebox(11,12){\sgtrans{\templist}}}%
\addtocounter{suji}{11}%
}}%

もう、自分でも理解できなくなっている。



段々と Fairy の深みに嵌まってゆく、、

xskak で chess の駒を回転させることは出来ていたのだが、盤面にはめ込む方法はわからなかった。で、フォントのエンコードを指定して、書くことにしたのだが、面倒くさい。
サンプルは Problemist の古いやつから。まず残念な画像は、、20220404_01.jpg
のような具合である。歪みと駒の薄さが気になり、考えるどころではない。
入力した図は
20220404_02.jpg
と行った具合だ。でも駒の翳が薄い所は心配なのだった。

No. 77 の 答えを見てみたら、

1.Pe6 ch, with 8 interference variations from the Black S.

とあり、まだあっているか理解できていない、、。

ちなみに、 LaTeX のソースは以下の通り。もっと上手いやり方があるとは思うのだが。
座標をうまく指定すれば、整数値で済みそうだ。

\begin{center}
\begin{tikzpicture}
\fontencoding{LSB}
\fontsize{15pt}{15pt}\selectfont
\draw(0,0) rectangle(120pt,120pt);
\draw(60pt,112.5pt ) node {BlrZ0M0A}; 
\draw(60pt, 97.5pt ) node {Z0Z0ZrZ0};
\draw(60pt, 82.5pt ) node {RZ000Z00}; % d6=0 h6=0
\draw(60pt, 67.5pt ) node {J0jnO0Z0}; 
\draw(60pt, 52.5pt ) node {0Z0ZPZ0Z};
\draw(60pt, 37.5pt ) node {Z0ZPZ0Z0};
\draw(60pt, 22.5pt ) node {0O0M0Z0Z};
\draw(60pt,  7.5pt ) node {L0Z0Z0a0};
\draw(52.5pt, 82.5pt ) node {\rotatebox[origin=c]{180}{L}}; %white d6
\draw(82.5pt, 67.5pt ) node {\rotatebox[origin=c]{180}{Q}}; %white f5
\draw(22.5pt, 37.5pt ) node {\rotatebox[origin=c]{180}{q}}; %black b3
\draw(97.5pt,112.5pt ) node {\rotatebox[origin=c]{180}{q}}; %black g8
\draw(112.5pt, 82.5pt ) node {\rotatebox[origin=c]{180}{l}}; %black h6
\end{tikzpicture}
\end{center}


LaTeX で Chess Problem の図を作る 続続

前にやったみた時は、A4 横に4つ並べてみたが、如何にも窮屈。どうせ画面でみるだけならページ数は気にせずゆったりとした方がいいかなーと思った。
\begin{multicols*}{3}
ということにすると、最終ページの配分が気にならなくなるので、これを使おうか。それとも、、
まあ、FIDE ALBUM の図を入力して試してみる。
20220326.jpg20220326_2.jpg

FIDE ALBUM は図数が多いので、配置はもう少し練ってみよう。それと、キリル文字をどうしようか、出典まで入力するか、Solutions はどうしようか、などなど。
こちらは、選りすぐりのものなので、なかなか解けないのも悩みのタネだ。

LaTeX で The Huddersfield College Magazine 続続続

Solution のソースは、以下のように簡単にできる。図を間違えようも無い。

\resumechessgame[id=pro1]
\Diagram
\mainline{1. Nc6} and mates in two moves.

\resumechessgame[id=pro2]
\Diagram
\mainline{1. Qf5+ Kh8 2.Ng6+ Kh7 3.Nf8+ Kh8 4.Qh7+ Nxh7 5.Ng6\mate} 

HCM1_7.jpgHCM1_8.jpg

今回の \Diagram のマクロは以下の通り。保存したデータの取り出し方が一寸面倒だが、マクロにしてしまえばいいことだ。

\newcommand{\Diagram}{%
\begin{center}
\begin{tabular}{c}
\textbf{\xskakgetgame{diagramlabel}}\\
\xskakgetgame{composer}\\
\xskakgetgame{date}\\
\chessboard
\\
\xskakgetgame{stipulation} \hfill \ 
\end{tabular}
\end{center}
}%

diagramlabel が長いと、stipulation が、盤面の幅より左に行ってしまうが、御愛嬌ということにしておこうか。
PDF は、そのうちに、 Home page にアップします。(追記: 2022-03-26 HCMvol.1 を up)