\(\LaTeX\)による詰棋書の組版(5) 駒を配置する

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

と入れておかなければいけなかったです。

それでは、試してみましょう。

本文に次のように入力してください。

この駒のx、y座標は

この座標平面を使っています。

コンパイルしてみてください。
次のような出力が得られたはずです。

ちょっと文字が小さいようですね。
文字の大きさを変える命令は \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
}

これで図面の入力が自然になったはずです。

例えば先の例に続けて次のように入力します。

これをコンパイルすると次の出力が得られるはずです。

これで詰将棋の図面を組むことができるようになりました。

今日はたくさん書いたので大変だったかも知れません。
エラーが出て上手くいかない場合はとりあえず今日の分のテキストをコピペしてみてください。

次回はこの図面記述部分を柿木ファイルから得ることを考えていきます。

「\(\LaTeX\)による詰棋書の組版(5) 駒を配置する」への5件のフィードバック

  1. 最近、読み返していて気づいたんだけど

    \先手{4}{1}{玉}

    は、冗長なので、

    \先手 41玉

    としたらいいのではないかと気が付いた。

    半角スペースで区切るだけ。

  2. こんな、マクロを書くと、もっと分かり易いかも

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください