プロジェクト

全般

プロフィール

縦書きTypst » 履歴 » リビジョン 21

リビジョン 20 (kanata, 2026/04/14 20:19) → リビジョン 21/27 (kanata, 2026/04/14 20:20)

{{>toc}} 

 # 縦書きTypst 

 2026年4月11日より頒布しています! 

 [技術書展20](https://techbookfest.org/event/tbf20)で頒布する予定の技術同人誌です 

 # ご購入 

 ## 技術書典から 

 {{rawhtml(<div class="iframely-embed"><div class="iframely-responsive" style="padding-bottom: 52.5%; padding-top: 120px;"><a href="https://techbookfest.org/product/k0LEpgzNvHPixwXXrmbegB" data-iframely-url="https://iframely.net/wjJ1XcXG?theme=dark"></a></div></div><script async src="https://iframely.net/embed.js"></script>)}} 

 ## BOOTHから 

 {{rawhtml(<div class="iframely-embed"><div class="iframely-responsive" style="height: 140px; padding-bottom: 0;"><a href="https://booth.pm/ja/items/8064063" data-iframely-url="https://iframely.net/nbqMbrlz?card=small&theme=dark"></a></div></div><script async src="https://iframely.net/embed.js"></script>)}} 

 {{rawhtml(<!-- https://iframely.com/ -->)}} 

 # 内容 

 Typstは近年開発されたRust製の新しい組版ソフトウェアです。   
 本書ではそのTypstを用いて、標準機能では対応していない縦書きに対応する方法、簡単に縦書きを実現する方法、関連機能やカスタマイズ方法を解説しています。   
 また、提供テンプレートを使えば例えばどんなものが作れるのかサンプルを紹介しています。 

 ## 紙面サンプル 

 {{thumbnail(表紙.png)}}{{thumbnail(01.png)}}{{thumbnail(03.png)}}{{thumbnail(04.png)}}{{thumbnail(08.png)}}{{thumbnail(19.png)}}{{thumbnail(29.png)}}{{thumbnail(36.png)}} 

 # テンプレートのダウンロード 

 [[Typst]]からダウンロードできます(リンク先の画面下にある「> ファイル」をクリックして tategaki_template.zip をダウンロードしてください) 

 # 正誤表 

 * 頒布後に見つけた(見つかった)ら 

 # 補足 

 # 関連情報 

 ## 縦書きでTypstの標準機能の段組みを利用する方法 

 Typstが標準で用意している段組み機能を使うことで、段組の移り変わりで文字数を調整する必要がなくなります。 
 [Tomoya Tajika](https://x.com/tmytjk)さんが発案したアイデアを紹介してくださっています。 

 {{rawhtml(<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">この本の真似をしてTypstの縦書きをやってみました.<a href="https://t.co/8Dngs004y5">https://t.co/8Dngs004y5</a> <a href="https://t.co/Dkr7fHw0PU">pic.twitter.com/Dkr7fHw0PU</a></p>&mdash; Tomoya Tajika (@tmytjk) <a href="https://twitter.com/tmytjk/status/2042973117107310840?ref_src=twsrc%5Etfw">April 11, 2026</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>)}} 

 {{rawhtml(<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">一応コードを置いておきます。<a href="https://twitter.com/hashtag/Typst?src=hash&amp;ref_src=twsrc%5Etfw">#Typst</a><a href="https://t.co/2v62k4KrlO">https://t.co/2v62k4KrlO</a></p>&mdash; Tomoya Tajika (@tmytjk) <a href="https://twitter.com/tmytjk/status/2043455847905583350?ref_src=twsrc%5Etfw">April 12, 2026</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>)}} 

 **ちょっと解説(本読んだ人しか解らない内容を書いています)** 
 筆者の本は、縦書きのブロック要素を回転させる方法で実現しています。 
 Typst標準の段組み機能は*横書き前提*なので、うまくフィットしません。 
 Tomoya Tajikaさんのアイデアは、ブロック要素じゃなくて、紙(というかPDFというか)を回転させればいいじゃない! 
 というやつですね。そうするとTypstの標準機能の段組みも自ずと縦書き用になるという。天才か・・・ 

 **課題ある** 
 この方法だと、ノドと小口の余白について個別に設定できなそう(仕組み上insideとoutosideが使えないのでTypstで設定する方式がなさそう) 
 解決方法としては本書おまけの「トンボ付け足し君」の応用することで解決できました 
 PDF各ページを回転しつつ、奇数ページ・偶数ページを判定して余白分を考慮してmoveでズラせば余白を調整できます 奇数ページ・偶数ページを判定して余白分を考慮してmoveでズラせば余白を調整できます 

 ``` 
 // トンボ付け足し君の366行目以降を以下に書き換えるとノドと小口の余白調整ができる(以下はおおげさに10mm調整している) 
 //-------------------- 
 //         主処理 
 //-------------------- 
 #for n in range(1, page_count+1) { 
   place(horizon+center)[ 
     #if calc.even(n) { // 右綴じ偶数ページはノドが右側 
       move(dx: -10mm)[#rotate(90deg)[#image(pdf_file, page: n,width: size.height)]] 
     } else { // 左綴じ奇数ページはノドが左側 
       move(dx: 10mm)[#rotate(90deg)[#image(pdf_file, page: n,width: size.height)]] 
     } 
   ] 
   if flag_guide_line { guide_line(paper: original_page_size,bleed: bleed) } 
   if flag_tonbo { tonbo(paper: original_page_size,bleed: bleed) } 
   if flag_blind_nombre{ blind_nombre(binding: blind_nombre_binding) } 
   if n < page_count { pagebreak() } 
 } 
 ```