2019年冬の新機能もご覧ください。Starterとは、主に書籍や技術同人誌を書くためのツールです。初期設定がGUIで行えるので初心者でも楽に導入でき、最初から見栄えのいいデザインが用意されていて、かついろんなところに気が効いています。Starterを紹介したときは多くの方から反響をいただきました。ありがとうございます。Starter」の紹介https://qiita.com/kauplan/items/d01e6e39a05be0b908a1今回はその続編として、前回の紹介記事よりあとに実装された新機能を紹介します。技術書典7も近いので1、参考にしてください。Starter」はちょっと長いので、以降では「Starter」と称しています。等幅フォントをGUIで選択可能にプログラムコードやターミナルの表示で使う等幅フォントを、GUIで選べるようになりました。等幅フォントをプレビューしながら選べます。各フォントの特徴も画面で簡単に説明しています。プログラムコードとターミナルでそれぞれ別の等幅フォントを指定できます。GUIで等幅フォントを選ぶ画面:Tipsですが、Inconsolataフォントで「文字列をさらに狭める」というオプションを選ぶと、フォント幅が狭くなって1行にたくさん詰め込めます。半角文字と全角文字の幅がだいたい1:2になるので(厳密な1:2ではない)、出力結果などに使うといいでしょう。項目「program_ttfont:」や「terminal_ttfont:」を変更してください。テキストの横に画像を表示するテキストの横に画像を表示するブロックコマンド「//sideimage」を用意しました。著者紹介でTwitterアイコンとともに使うといいでしょう。レビュアーも募集中!//}表示例:ブロックの中には箇条書きやプログラムコードを入れられますが、「途中で改ページされない」「画像下へのテキストの回り込みはできない」「脚注が使えない」という制限があります2。詳しくはドキュメントを参照してください。プログラムコードを枠線で囲むプログラムコードを枠線で囲むオプションを用意しました。プログラムコードが途中で改ページされるとき、枠線があったほうが少し読みやすくなります。true」を設定してください。ごとに改ページする機能を用意しました。初心者向けの入門書だと、節ごとに改ページするのはよく見かけます。true」を指定してください。章ごとの最初の節では改ページしません。これは意図した挙動であり、バグではないので注意してください。ページ先頭にきた場合、従来はタイトルの上に余白が入っていました。ページ先頭の場合は、この余白はなくても問題ないはずです。Starterではデフォルトでこの余白を入れないようにしました。true」をfalseにすると、入るように変更できます。節や項がページ最下部で改ページされるのを防ぐLaTeXでは、ページ最下部の段落が最初の1行のみになるのを嫌います。なりそうになったら、段落の直前で改ページします。タイトルが、十分なスペースがありそうなのに改ページされてしまうことがあります。Starterでは、ページ最下部の段落が最初の1行のみになるのを許しています。そのため、節や項のタイトルがページ最下部にきても改ページされず、余計なスペースが空かないようになっています。true」3で変更できます。Starter独自の設定ファイル「config-starter.yml」を用意しました(これはRe:VIEWの設定ファイルconfig.ymlとは別です)。簡単に設定できるようになりました。以下のような項目が設定できます。画像位置に後続のテキストを流し込む詳しくはconfig-starter.ymlの中を見てください。キャプション直後の改ページを防ぐパラメータを導入プログラムコードやターミナルには、キャプション(説明書き)がつけられます。このキャプションの直後で改ページされると、キャプションとプログラムコードが別々のページになってしまうため、読みやすさが損なわれます。キャプション直後で改ページされた例:Starterではこの問題を防ぐよう対策をしていましたが、設定値に甘さがあったため、防ぎきれてはいませんでした。現在は何度も実験をして設定値を決めたため、以前よりはずっと発生しにくくなっています。それでも完全に防ぐのは難しいです。これはフォントや行間などに依存するので、どの書籍でも通用するような完璧な設定値はありません。そこで、この設定値を各自で調整できるようにしました。4.8zh」という箇所を調整してください。キャプション直後の改ページが発生するなら、この値を少し増やしてください。十分なスペースがあるのに改ページされるなら、この値を少し減らしてください。LaTeXでは、プログラムコードが1行だけで改ページされることはないらしく、そうなりそうになったらプログラムコードの前で全体を改ページするようです。この挙動を変更する方法を知ってる人がいたら教えてください4。フォントサイズを変更するコマンドテキストのフォントサイズを変更するインラインコマンドを用意しました。文字をもっと大きくするまたテキストを強調する@<strong>{}の派生コマンドとして、フォントサイズを大きくするものを用意しました。文字をもっと大きくするどのくらい小さくまたは大きくなるかは、次の画像を参考にしてください。テキストを目立たせないための@<weak>{}テキストを目立たせる「@<strong>{}」とは逆に、目立たせないための「@<weak>{}」を用意しました。プログラムコードのおまじないを目立たせたくないときに使ってください。ターミナルのカーソルを表示するターミナルのカーソルを表す「@<cursor>{}」を用意しました。次の例では、「f」にカーソルが載っていることを表します。written表示例:なおこの機能は、とある利用者からの要望により実装しました。すべての要望に答えられるとは限りませんが、他にも要望があれば教えて下さい。できる範囲で対応します。折返しが右端まで達するようにするStarterでは、プログラムコードの長い行を自動的に折り返してくれ、また折返し記号もつけてくれます。一見すると右端まで到達してないのに折り返しているように見えることがあります。次の例だと、もう1文字入るように見えませんか?このような場合は、プログラムコードの表示幅をほんの少しだけ広げると、折返しが右端まで到達するようになります。0.3mm」と設定すると、次の例のように右端まで達するようになりました。0.3mm」という値は各自で調整してください。1mmなんて大きな値は必要ないはずで、せいぜい0.5mmとかでいいはずです。画像やスクリーンショットを多用する書籍だと、コンパイルに時間がかかります。印刷用に高解像度の画像を使った場合はなおさらです。そこでStarterでは、画像を枠線だけで表示する「ドラフトモード」を用意しました。このモードでは画像を表示するかわりに枠線を表示するので、コンパイルが非常に速くなります(正確にいうと、LaTeXのコンパイル時間は変わらないけどそのあとのPDF生成が速くなります)。true」を設定するか、または環境変数「$STARTER_DRAFT」に何らかの値を入れてください。ように指定すると、その画像はドラフトモードにならず通常通り表示されます。ドラフトモードであっても、この画像↓は画像として表示する。//image[ファイル名][画像の説明][scale=0.8,draft=off]この機能は、締め切りが迫ったときには大活躍します。今のうちに試してみるといいでしょう。印刷用PDFとダウンロード用PDFを切り替える印刷用PDFとダウンロード用PDFとで、仕様を少し変えたいことがあります。印刷用PDFは白黒だけど、ダウンロード用PDFはカラーにしたい。印刷用PDFは本文を見開きの外側に少し寄せるけど、ダウンロード用は本文をページ中央に置く。印刷用PDFはリンク機能をオフにするけど、ダウンロード用PDFではオンにしたい。このようなときは、環境変数「$STARTER_TARGET」を設定することで印刷用とダウンロード用を切り替えられます。pdfこの値は、LaTeXのスタイルファイルでは「\starter@target」で参照できます。ダウンロード用PDFではカラーを使うようになっています。印刷用の場合だけ本文を見開きの外側に寄せています。数ページで1.5文字分狭める\fiLaTeXスタイルファイルから環境変数を参照するLaTeXのスタイルファイルの中から、環境変数を参照できるようになりました。いっても、変数名が「STARTER_」で始まる環境変数だけが対象です。設定すると、LaTeXのスタイルファイルでは「\STARTER@FOO@BAR」として参照できます。お分かりだと思いますが、環境変数の「_」を「@」に変換した名前になります。使い道は特に限定してないので、自由に使ってください。細かなバグフィックスStarterにもいくつかバグがあったので、修正しています。複数のプログラムコードを並べたときに2つめ以降のマージンが広がってしまうバグがありました。これは解決策が長らく分からなかったのですが、TeXには直前の余白の幅や高さを表す「\lastskip」5なる素敵な機能があることが分かったため、解決することができました。直前に余白があれば、その分を差し引いて余白を追加しています。CSSなら自動でやってくれることを手動でやっているわけですが、解決できてほんとよかった。(La)TeXはちっとも思い通りに動いてくれないのでクソゲー感満載ですけど、諦めかけたころになってこういう機能が見つかったりするので、ムリゲーではないんですよね。いうところがまた腹が立ちます。他にバグがあれば、教えてもらえると助かります。2019-08-27:紹介し忘れていたので追加しました。)プログラムコードやターミナルの表示において、「ここだけ文字を小さくして長い行を収めたいなー」と思ったことはありませんか?Starterならそれができます。第3引数に、フォントサイズを指定できるようになりました。実装が間に合わなかったもの前回の記事では、「今後の計画」として「インライン命令の入れ子」の実装を挙げていました。残念ながら、技術書典7には間に合いそうにありません。実は仮実装をしてみたのですが、Re:VIEWとの互換性をなるべくとりたいのに、Re:VIEWの細かい仕様が把握できないため、導入に踏み切れないのです。Re:VIEWのインライン命令の仕様を把握するためにソースコードを読んでみたのですが、こう言っていいか分かりませんが、僕の頭では理解しかねるコードでした。「@<x>{...}」と「@<x>$...$」と「@<x>|...|」の3つの書き方に対応するために複雑になっているようで、一時的にnull文字で置き換えてまた元に戻すとか、そんな感じになっていて正直理解できませんでした。いうわけで、Re:VIEWにおけるインライン命令の細かい仕様が分からないため、実装にはまだ時間が必要です。僕としてはとても残念です。期待していた方、申し訳ありません。ユーザの感想ユーザから感想をいただきました。ありがとうございます。(https://twitter.com/konosumi/status/1162615784234860544)今回の変更点かなり良かったです。Starterで本ができます。2019他にも感想お待ちしています。Starterが受けとめます。皆さんは原稿を書くことに集中して、すてきな書籍や技術同人誌を生み出してください。つけてツイートしてください。おまけこんな記事も書いてるので、よければ見てください。2.5での改善点と残っている問題点https://qiita.com/kauplan/items/5068e2a0da7847c2014e原稿執筆時点である2019年8月のこと。↩これらの制限は内部でLaTeXのminipage環境を使っているせいです。よい解決方法があれば教えて下さい。「clubline」とは、ページ最後の段落が最初の1行だけになっていることを表す言葉だそうです。すればいいかと思いましたが、試した限りはうまくいきませんでした。LaTeXの本だと載ってないようで、TeXの本には載ってました。LaTeXじゃ足りなくてTeXにまで手を出さないといけないの、つらい。upLoginユーザーは見つかりませんでした。