第5回です。
今回までで取りあえず詰棋書を組むことが可能になります。
まずは駒を配置するために前回作ったマクロ \将棋盤 を2つに分割します。
最初に
\def\将棋盤{
を
\def\図面始{
次に終わり近くの
\put(3,2){\makebox(0,0){持 駒}}{
を
} \図面終#1{ \put(3,2){持 駒 #1}
これで本文に
\将棋盤
ではなく
\図面始 (駒の配置) \図面終
と記述しようという訳です。
次に配置を記述するマクロを用意しましょう。
毎回
\put(10,17){\makebox(0,0){歩}}
と書くのは大変ですから。
プリアンブルに\先手と\後手を次のように定義してください。
\def\先手#1#2#3{ \put(#1,#2){\makebox(0,0){#3}} } \def\後手#1#2#3{ \put(#1,#2){\makebox(0,0){\rotatebox[origin=c]{180}{#3}}} }
これで
\先手{x座標}{y座標}{駒}
と記述すれば、盤面に駒が配置されるはずです。
\rotatebox[origin=c]{180}{}
は180度回転させる命令です。
あ、忘れていました。
この命令を使うためにプリアンブルの先頭に
\usepackage[dvipdfmx]{graphicx}
と入れておかなければいけなかったです。
それでは、試してみましょう。
本文に次のように入力してください。
コンパイルしてみてください。
次のような出力が得られたはずです。
ちょっと文字が小さいようですね。
文字の大きさを変える命令は \large,\Large,\LARGE,\small,\scriptsizeなどがあります。
下の図のように、3箇所に\largeを挿入してください。
これでちょうどよいみたいですね。
次にこの\先手と\後手のマクロを改良します。
x座標、y座標を指定するのは難しいし、いちいち計算するのは面倒です。(実は今までのつみき書店の本はこの形で指定しています)
ここは次のように記述したいものです。
これは次のようにすれば実現できます。
簡単に説明すると
-
\((1,1)⇒(18,21)\)
\((9,9)⇒(2,5)\)
に変換すればよいので
-
\((a,b)⇒(x,y)\)
とすると
-
\(x=-2a+20\)
\(y=-2b+23\)
です。
その計算をマクロの中でしています。
この部分はコピペした方が良いかも知れません。
\def\先手#1#2#3{ \makeatletter \newcount\横 \横=#1 \multiply \横 by -2 \advance \横 by 20 \newcount\縦 \縦=#2 \multiply \縦 by -2 \advance \縦 by 23 \put(\横,\縦){\makebox(0,0){\large#3}} \makeatother } \def\後手#1#2#3{ \makeatletter \newcount\横 \横=#1 \multiply \横 by -2 \advance \横 by 20 \newcount\縦 \縦=#2 \multiply \縦 by -2 \advance \縦 by 23 \put(\横,\縦){\makebox(0,0){\rotatebox[origin=c]{180}{\large#3}}} \makeatother }
これで図面の入力が自然になったはずです。
例えば先の例に続けて次のように入力します。
これをコンパイルすると次の出力が得られるはずです。
これで詰将棋の図面を組むことができるようになりました。
今日はたくさん書いたので大変だったかも知れません。
エラーが出て上手くいかない場合はとりあえず今日の分のテキストをコピペしてみてください。
次回はこの図面記述部分を柿木ファイルから得ることを考えていきます。
Tweet
最近、読み返していて気づいたんだけど
\先手{4}{1}{玉}
は、冗長なので、
\先手 41玉
としたらいいのではないかと気が付いた。
半角スペースで区切るだけ。
たしかに!
自然で可読性も上がりますね。
こんな、マクロを書くと、もっと分かり易いかも
\makeatletter
\def\先手配置#1{%
\@for\member:=#1\do{\expandafter\先手\member}
}
\def\後手配置#1{%
\@for\member:=#1\do{\expandafter\後手\member}
}
\makeatother
———————–
\先手配置{41玉, 13飛, 33馬,43角,55銀}
\後手配置{51銀,72と,53玉,73と,14飛}
図面を手入力する場合には便利そうですね。