kmuto’s blog

はてな社でMackerel CREをやっています。料理と旅行といろんなIT技術

技術書典15に向けて『Hatena Tech Book Vol.2』を作っていた(その9)

その8からの続き。

kmuto.hatenablog.com

Hatena Developer Blogにも書いたんだけど、盛り上げバナーを id:mazco さんが作ってくれた! サイコウ!

今日は、お金まわりや印刷について。あまりドロドロしたことは書かないよ!

その1でも書いたとおり、今回の技術書典出展は私自身の趣味道楽に皆さまを巻き込んでいるという側面があるので、制作費については全額私が出すことに決めて、最終的に赤が出ても構わないことにしている。思い出プライスレス。

ただ、「赤が出ても構わない」とは書いたが、最初から赤前提で作るのはダンピングで、ほかの出展サークルにも礼を失する。著者陣・デザイナー・ブース・その他協力してくれた皆さんにいくばくか謝礼できるくらいの利益は出したい、という観点でつどつどの金額の判断をしていた。

ここまでにかかった費用項目としては、

  • オフライン出展料
  • モバイルバッテリとSIMカード(モバイルバッテリは再利用可能だけど、ガッツリ国内旅行するのでもなければあまり利用シーンないな……。国外だとスマホばかり見てるのは諸々危ないので、バッテリが必要なまでに見ることは少ない)
  • 見本カバー、ブックスタンド
  • 印刷所での印刷製本
  • A2ポスター印刷

ブースの什器は過去開催時の購入物や社内貸与で賄っている。あとの追加は当日の交通費くらいか。

印刷製本費は昔に比べると上がっていそうだが、ある程度の部数を刷るとまぁそのくらいかね、というところに落ちつく。ただ売れ残って在庫になると、どこに保管する?→自宅の収納や机の下で呪物化のコースになるので、この数の見込みはたいへん難しい……。

はてなの前回参加の技術書典6は、コロナ前のリアル開催最盛期時代。かたや今の技術書典はコロナからようやく日の目が見えてきているがまだ恐怖感は拭えていないという中での開催。また、前回は電子版なしでの紙1本勝負だったけれども、今回は電子版単体の販売も選択肢に入れている。悩んだ末に、当日の刷り部数については安全側に倒した数を選択した。

ただ、もし紙版が予想よりも早くに売り切れると、購入のために来訪された方をがっかりさせてしまう。そのフォローとして、「後から印刷」を使う「紙(受注生産)+電子」メニューも追加した。製本が届くのに少しお待ちいただくことにはなるが、販売していたものと同等のものがご自宅に配達される。

こちら側としては発送名簿管理や配送といった「絶対にやりたくないでござる」のところを全部技術書典事務局にお任せできるので、とても気楽。刷り部数によっては赤字になったり、いくぶん在庫が発生したりする可能性はあるものの、これで当日の購入希望者のがっかりをいくらかでも緩和できるなら、十分許容範囲と判断した。

なお、オフラインを紙あり祭典として盛り上げたいという思いがあり、「紙+電子版」「紙(受注生産)+電子版」のいずれも会場限定としている。

TeXいじり

著者情報の処理はRe:VIEWの//info命令を代用した。

Re:VIEWファイルだと

//info{
author=kmuto
//}

Markdownファイルだと

<div class="info">
author=kmuto
</div>

review-ext.rbでこれを解釈して\chapterのサブタイトルにする(jlreq.clsでは見出しオプションとしてサブタイトルを持てるようになっている)。

module ReVIEW
  module LATEXBuilderOverride
    def builder_init_file
      super
      # 仮著者名
      @author = '★あのにます'
    end

    def info_begin(_caption = nil)
      @doc_status[:minicolumn] = 'info'
    end

    def info_end(_caption = nil)
      @doc_status[:minicolumn] = nil
    end

    def paragraph(lines)
      if @doc_status[:minicolumn] == 'info'
        # 著者情報はメタ情報化
        lines.each do |l|
          k, v = l.split(/\s*=\s*/, 2)
          @author = v if k == 'author'
        end
      else
        super(lines)
      end
    end

    def result
      super.sub(/\\label\{chap:/) { "[#{@author}]#{$&}" }
    end
  end

  class LATEXBuilder
    prepend LATEXBuilderOverride
  end
end

これでLaTeX変換すると、\chapterのサブタイトル扱いになる。

\chapter{ドキュメントを伝えやすくするための技術(校正編)}
[kmuto]\label{chap:kmuto}

スタイル指定。

\RenewBlockHeading{chapter}{0}{
  …
  subtitle_font={\sffamily\gtfamily\mdseries\large},% サブタイトルを著者名に流用
  subtitle_break=true,
  subtitle_format={\hfill #1\hspace*{2\jlreq@zw}}
}