トップページ | 全エントリー一覧 | RSS購読

アーカイブ

豊聡耳 神子

加護()

(自動α) 〔このブログ〕は〔Google Analytics及びfc2アクセス解析〕を用いて〔あなた〕のアクセスを解析している。
(自動α) 〔あなたのIPアドレスなど〕一部情報は〔Googleまたはfc2〕に送付される可能性がある。
(自動β) 〔このブログ〕は〔Cookie〕を利用している。〔このブログ〕を利用することで、〔あなた〕はCookieの利用に同意したとみなされる。
(自動β) 〔このブログ〕は表示するフォントに〔にしき的フォント〕を利用している。

Twitter

アクセスランキング

[ジャンルランキング]
サブカル
355位
アクセスランキングを見る>>

[サブジャンルランキング]
その他
98位
アクセスランキングを見る>>

最新トラックバック

Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

[TeX][TikZ] TikZ でカード作成

この記事は TeX & LaTeX Advent Calendar 2021 の 16 日目の記事です。 15 日目は mod_poppo さんの Standard ML on LuaTeXしてみる でした。 17 日目は mattskala さんの MakeでLaTeX言語のビルドしましょう です。

非常に遅れて申し訳有りません。

さて、TeX を使っているならば、「TeX (LaTeX) でカードゲームのカードを作成したい」 という要求が出てくるのは自然であると考えられます。 実際、カードゲームのカードは、同じテンプレートに違うテキストを流し込んである場合が多く、 TeX のマクロを活用して自動化することができるのではないかと考えられます。

今回は、簡単なカードを 2 枚作成することを考えます。 LuaLaTeX を使うことにしましょう。

まず、マクロ定義をするファイルを作成するのですが、これはクラスファイル (waku.cls) とします。 なぜパッケージファイル (*.sty) にしないかというと、ここで定義するコマンドは 任意のクラスで使用するわけではないからです。

waku.cls にマクロ定義をするという方針が定まったので、ひとまず作ってゆきます。 まず、クラスファイルの中で、jlreq.cls を読み込みます。 jlreq は余白や紙面サイズを簡単に設定できるので重宝します。 紙面の大きさがそのままカードの大きさになるので、紙面の大きさをポーカーサイズ 63 mm × 88 mm にします。余白は邪魔なのですべて 0 pt にします。 一行の長さも 63 mm にします。 また、tikz で文字を配置するので tikz を読み込み、calc ライブラリも読み込みます (座標の計算用です)。 トンボを出力するために gentombow を読み込みます。ヌリタシは 3 mm にしました。 また、コマンド定義用に xparse パッケージも読み込みます。

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{waku}[2021/12/23] \LoadClass[ jafontsize=2.5mm, baselineskip=1.1zh, line_length=63mm, paper={63mm,88mm}, gutter=0pt, head_space=0pt, foot_space=0pt, fore-edge=0pt, ]{jlreq} \RequirePackage{luatexja,xparse,xcolor,graphicx,luatexja-fontspec} \RequirePackage{tikz} \usetikzlibrary{calc} \RequirePackage[export]{adjustbox} \RequirePackage[pdfbox]{gentombow} \settombowbleed{3mm} \setlength{\parindent}{0pt}

ここで、\Card{⟨名前⟩}{⟨イラストのファイル名⟩}{⟨文章欄⟩} というコマンドを定義して、 *.tex ファイル内で \Card コマンドを使うとカードが出力されるようにします。

レイアウトを決めるために、方眼を出力します。 \Card コマンドに方眼を出力するように定義します。

\NewDocumentCommand\Card{m m m}{% \begin{tikzpicture}[x=1mm,y=1mm] \coordinate(OL1)at(0,0);\coordinate(OL3)at(63,88); \coordinate(OO1)at(-3,-3);\coordinate(OO3)at(66,91); \useasboundingbox(OL1)rectangle(OL3); \draw[very thin,cyan,nearly transparent](OO1)grid[step=1](OO3); \draw[thin,cyan,nearly transparent](OL1)grid[step=10](OL3); \draw[thin,cyan,nearly transparent](OL1)rectangle(OL3); \end{tikzpicture}% }

ここでのテクニックとして、カードの印刷領域だけをバウンディングボックスとして使い、 バンディングボックスを 3 mm はみ出して方眼を書くことで、 ヌリタシ部分にも方眼を書きつつ、トンボの裁ち落としラインがカードの外側に一致するようにしています。

方眼を出力したら、それを印刷し、レイアウトを決めます。 このとき、TikZ で描画するのに必要そうな点の座標を確認します。

レイアウトを決めたら、TikZ で描画します。 入れる文字はとりあえず決め打ちしておき、あとで #1 などに置き換えます。

\NewDocumentCommand\Card{m m m}{% \begin{tikzpicture}[x=1mm,y=1mm] \coordinate(OL1)at(0,0);\coordinate(OL3)at(63,88); \coordinate(OO1)at(-3,-3);\coordinate(OO3)at(66,91); \coordinate(N3)at(3,75);\coordinate(N1)at(66,85); \coordinate(A3)at(5,40);\coordinate(A1)at(58,75); \coordinate(T3)at(5,3);\coordinate(T1)at(58,40); \useasboundingbox(OL1)rectangle(OL3); %% 枠 \fill[black](OO1)rectangle(OO3); \fill[white](A3)rectangle(A1); \fill[white](T3)rectangle(T1); \filldraw[fill=white](N3)rectangle(N1); %% 絵 %%%% min size オプションは adjustbox パッケージが提供。 %%%% 枠内いっぱいに縦横比維持して表示するためのトリック。 %%%% (min size を指定しないと、枠内に余白ができる) \draw[path picture={\node at (path picture bounding box.center) {\includegraphics[width=53mm,height=35mm,keepaspectratio,min size={53mm}{35mm},clip] {kuma.pdf}};}](A1)-|(A3)-|cycle; %% 文字 (VisualTikz 17.8, 17.9 あたりを参照) \path(N3)[anchor=south west,font=\fontsize{6mm}{0pt}\selectfont]node{くま}; \path(T1)--(T3)node[midway,anchor=center,text width=50mm,align=flush center]{くまです。}; %% 方眼 \draw[very thin,cyan,nearly transparent]($(OL1)-(3,3)$)grid[step=1]($(OL3)+(3,3)$); \draw[thin,cyan,nearly transparent](OL1)grid[step=10](OL3); \draw[thin,cyan,nearly transparent](OL1)rectangle(OL3); \endif \end{tikzpicture}% }

レイアウトが決まり、TikZ で描画ができたら、方眼は不要なので消します。 再度レイアウトを調整する可能性を考えて、クラスオプションで方眼をオンオフできるようにします。 waku.cls の頭に以下を追記して、方眼を書くコードを \ifgrid\fi で囲みます。

\newif\ifgrid\gridfalse \DeclareOption{grid}{\gridtrue} \ProcessOptions\relax

そして、コマンド定義文中の必要な部分を #1 などに置き換えます。

最終的に出来上がったものは GitHub にあげてあります。

以上、TikZ でカード画像を作ってみる話でした。

トラックバック
トラックバック送信先 :
コメント

プロフィール

さーくる⑨

Author:さーくる⑨

Please email us to
circle9.mail☯gmail.com

さーくる⑨のメンバーは、

原メンバー

  • Carele Smith(代表)
  • kalna
  • Water Fall
  • Ocean@海P
  • NEO

準メンバー

  • ふにょ(イラストレーター)
  • ほたて(イラストレーター)
  • (雑用)

VISION は亡くなったんだ……!!

公式のデータベースのアーカイブとか、それと同等なものとか、 富山大会に関することとかです。

M.I.W. 公式だったもの:
頼子ドットインフォ:
さーくる⑨独自:
その他:
参加者心得は、参加者の方は必ず目を通して下さい。

検索フォーム

広告

リンク

管理画面


当ブログはリンクフリーです。これをクリックすれば、FC2 ブログの人はこのブログをリンクに追加できます。

相互リンクも募集してます。Twitter か何かで声かけてください。

East Opera 2019

http://www.circle9.work/e-banner.png

上はこのページのバナー(2019年版)です。直リンクでバナー貼ってくれると、年代わりに更新されるはずだよ! サイト名は" East Opera 20XX"でもok。 XXの部分は毎年変わります。


リンク集

以下さーくる⑨が運営/管理するサイト

以下VISION関連

以下東方関連

以下カードゲーム(トランプ)関連

その他

  • さんろ研究室
  • メールフォーム

    さーくる⑨ (circle9.mail☯gmail.com)

    名前:
    メール:
    件名:
    本文:

    乱数カード考察:課題

    VISIONのカードをランダムに選んで、それを考察しよう。忘れられたカードを再発掘しよう。新しい価値を見つけよう。
    現在の課題は
    • No.549 呪海に眠る記憶
    • No.640 地霊殿
    • No.973 萎縮
    • No.1518 八雲 藍
    エントリーはこちら
    古い記事には、最新のエラッタやテキスト修正、または最新の環境が反映されてませんので、ご注意ください。

    ブログ更新する人へ: テンプレートは下書き保存してあるので、記事の管理よりそこから記事を書いてください。その際、公開設定は「公開」保存日時は「保存した日時」にしてください。

    ブロとも申請フォーム

    ブロとも一覧