PythonとTexによる筆算(ひっさん)問題生成

PythonとTexを活用してひっ算ドリルを生成する方法

生成済みPDFはこちらのページから


生成例


Tex環境のインストール

久々にTeX環境を触ろうと調べたところ、最近はTeX Liveというディストリビューションが人気があるようです (公式ページ)。

インストールはこちらの日本語の解説ページに従えば問題ないと思います。

ネットワークインストールとISOファイルのダウンロードが選択できますが、フルインストールの場合はISOファイルからのインストールをお勧めします。理由はかなりインストールに時間がかかるため。自分はフルインストールを選択しましたが、8時間を要しました。そのためネットワークインストールの場合はパッケージを絞り込んだ方がいいと思われます。

Msys2の環境ではPATH環境変数は自動で設定されませんでしたが、こちらで設定すれば問題なく動作しました

インストールパッケージの選択

以下のパッケージ選択でとりあえず問題ありませんでした。必要なパッケージについては後から追加でインストールすればいいと思います

TeX環境テスト

インストール後、以下のコマンドが正常に終了し、sample2e.pdfが生成されれば問題ないと思います

% ptex2pdf -l sample2e.tex

TeX生成プログラム (Math Monkey)

GitHubからcloneまたはZIPファイルをダウンロードして展開します

% git clone https://github.com/udon-code/math_monkey.git math_monkey

Math Monkey

以下のような特徴をもっています

  • texを出力
  • 足し算、引き算
  • 乱数を用いた問題で毎回異なる問題を生成
  • 最大・最小の桁数を指定可能
  • 桁上がり/桁下がりあり、なしの指定
  • 使う数を2から最大20まで選択可能
  • 答えページの生成

オプション

使用できるオプションは以下の通りです

オプション説明
-h, –help ヘルプを表示
-o file, –output file 出力ファイル
–title string ドキュメントタイトル
–name string 名前欄の記載 (例: なまえ)
-n num, –num_problem num 生成する問題数
–answer 答えも生成する。デフォルトは問題のみ
-t {add,sub}, –type {add,sub} add: 足し算, sub:引き算
–digits num (最大)桁数
–min_digits num 最小桁数。省略すると(–digits)と同じ桁数が設定されます
–num_augend num 使用する数字の個数。デフォルトは2個
–inc_carry_over 桁上げを含む (デフォルトは含まない)
–only_carry_over 桁上げを含むものだけを生成
–exc_digits_incr 最終段の桁上がりを含む

使用例

(#以下の説明は削除して実行)

3桁の足し算問題を100個生成 (桁上がりなし)
% python scripts/math_monkey.py \  # 
    -t add                      \  # 足し算
    -o add_3digits_100.tex      \  # 出力ファイル名
    -n 100                      \  # 100問出力
    --digits 3                  \  # 3桁 + 3桁
    --min_digits 3                 #
% ptex2pdf -l add_3digits_100.tex
3桁の引き算問題 (桁下がりあり)
% python scripts/math_monkey.py \  # 
    -t sub                      \  # 足し算
    -o sub_3digits_100.tex      \  # 出力ファイル名
    -n 100                      \  # 100問出力
    --inc_carry_over            \  # 桁下がりあり
    --digits 3                  \  # 3桁 - 3桁
    --min_digits 3                 #
% ptex2pdf -l sub_3digits_100.tex
10桁までの数10個の足し算 (答えも生成)
% python scripts/math_monkey.py \  # 
    -t sub                      \  # 足し算
    -o sub_10digits_x10_10.tex  \  # 出力ファイル名
    -n 10                       \  # 10問出力
    --num_augend 10             \  # 10個の数
    --inc_carry_over            \  # 桁上がりあり
    --digits 10                 \  # 最大10桁
    --min_digits 1              \  # 最小1桁
    --answer                       # 答えも生成
% ptex2pdf -l sub_10digits_x10_10.tex

おすすめ