Re:VIEW Starterを使ってPDFを作成していてちょっと困った部分があったので、まとめておきます。
[Re:VIEW Starterとは]
Re:VIEWという「技術(書|者)のための電子・紙書籍制作ツール」があります。しかし、Re:VIEWは初期設定を行うのが難しいため、その初期設定をGUIを利用して行えるのがRe:VIEW Starterというサイトです。
2021年3月時点で最新のRe:VIEW Starterのユーザーガイドはこちらです。
[強制改行を連続で使いたい]
さて、本題です。
Re:VIEW Starterでは以下のように表を記述できます。
//tsize[40,60] //table[?][改行なし]{ 項目 内容 ---------------------- ひらがな あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよ カタカナ アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨ //}
このコードは以下のような表に変換されます。
「内容」の列が中途半端なところで改行されてしまっているので、これをいい感じにするために、@<br>{}
という強制改行命令を利用します。
//tsize[40,60] //table[?][内容のみ改行あり]{ 項目 内容 ---------------------- ひらがな あいうえおかきくけこさしすせそ@<br>{}たちつてとなにぬねのはひふへほまみむめもやゆよ カタカナ アイウエオカキクケコサシスセソ@<br>{}タチツテトナニヌネノハヒフヘホマミムメモヤユヨ //}
このコードは以下のような表に変換されます。
改行は上手くいきましたが、2行目が表をはみ出してしまったので、さらに強制改行命令を追加します。
//tsize[40,60] //table[?][内容のみ改行追加]{ 項目 内容 ---------------------- ひらがな あいうえおかきくけこさしすせそ@<br>{}たちつてとなにぬねのはひふへほ@<br>{}まみむめもやゆよ カタカナ アイウエオカキクケコサシスセソ@<br>{}タチツテトナニヌネノハヒフヘホ@<br>{}マミムメモヤユヨ //}
このコードは以下のような表に変換されます。
今度は、「項目」列のセルが下の方に来てしまっているため、ここに改行を追加してセルの上部に配置してみます。
//tsize[40,60] //table[?][項目も改行あり(7つ)]{ 項目 内容 ---------------------- ひらがな@<br>{}@<br>{}@<br>{}@<br>{}@<br>{}@<br>{}@<br>{} あいうえおかきくけこさしすせそ@<br>{}たちつてとなにぬねのはひふへほ@<br>{}まみむめもやゆよ カタカナ@<br>{}@<br>{}@<br>{}@<br>{}@<br>{}@<br>{}@<br>{} アイウエオカキクケコサシスセソ@<br>{}タチツテトナニヌネノハヒフヘホ@<br>{}マミムメモヤユヨ //}
このコードは以下のような表に変換されます。
ようやくいい感じの表を作ることができました!しかし、元のテキストを見ると@<br>{}
がたくさん並んでおり、いい感じではありません。
本来書きたい内容よりも強制改行命令の文字列が多くなっており可読性が低いです。
[独自のインライン命令を追加する]
これを解決するために、まずは独自のインライン命令を追加してみます。
2021年3月現在、Re:VIEW Starterで作成したプロジェクトの直下にはreview-ext.rb
というRubyで書かれたソースコードがあります。
ソースコード中のコメントによれば「Re:VIEWを拡張し、インライン命令とブロック命令を追加する」ためのファイルです。
例えば、@<hearts>{}
と記載すると♡
と出力するための命令は以下のような形で定義されています。
module ReVIEW Compiler.definline :hearts ## ハートマーク ## 省略 ## LaTeX用の定義 class LATEXBuilder ## ハートマーク def inline_hearts(str) '$\heartsuit$' end ## 省略 end ## HTML(ePub)用の定義 class HTMLBuilder ## ハートマーク def inline_hearts(str) #'♥' '♥' end ## 省略 end class TEXTBuilder ## ハートマーク def inline_hearts(str) '♥' end ## 省略 end end
また、review-latexbuilder.rb
というファイルを見ると、強制改行の場合は\\\\[0pt]
という文字列を返すinline_br()
メソッドが定義されています。
これらを参考に、7個の強制改行を出力するインライン命令を以下のようにreview-ext.rb
に追加してみます。今回はPDF(LaTex)のみ対応するので、LATEXBuilder
の部分のみ修正します。
module ReVIEW Compiler.definline :br7 ## LaTeX用の定義 class LATEXBuilder def inline_br7(str) "\\\\[0pt]" * 7 end ## 省略 end end
こうすると、以下のように表を記述できます。
//tsize[40,60] //table[?][項目も改行あり(独自)]{ 項目 内容 ---------------------- ひらがな@<br7>{} あいうえおかきくけこさしすせそ@<br>{}たちつてとなにぬねのはひふへほ@<br>{}まみむめもやゆよ カタカナ@<br7>{} アイウエオカキクケコサシスセソ@<br>{}タチツテトナニヌネノハヒフヘホ@<br>{}マミムメモヤユヨ //}
このコードは以下のような表に変換されます。
これで元のテキストもすっきりしました!
しかし、まだ問題があります。場合によっては改行の数が7つではなく、もっと必要な場合があります。その度に独自のインライン命令を追加で定義することもできますが、それは面倒なのでやりたくありません。
[強制改行命令を改造する]
独自のインライン命令を必要な改行数分だけ定義するかわりに、既存の強制改行命令を改造してみます。
インライン命令は@<br>{}
のように<>
の中に命令の名前を書き、{}
の中に引数を記載するので、これを利用して改行の個数を指定します。
review-latexbuilder.rb
ファイルのinline_br()
メソッドを以下のように修正します。
def inline_br(s) "\\\\[0pt]" * (s.present? ? s.to_i : 1) end
これを利用すると、以下のように表現できます。
//tsize[40,60] //table[?][項目も改行あり(改造)]{ 項目 内容 ---------------------- ひらがな@<br>{7} あいうえおかきくけこさしすせそ@<br>{}たちつてとなにぬねのはひふへほ@<br>{}まみむめもやゆよ カタカナ@<br>{7} アイウエオカキクケコサシスセソ@<br>{}タチツテトナニヌネノハヒフヘホ@<br>{}マミムメモヤユヨ //}
このコードは以下のような表に変換されます。
これで必要な数だけ改行の数を指定できるようになりました! 🎉
[乱用注意]
上で紹介したような形で、独自の命令を追加したり、既存の命令を改造したりする場合、Re:VIEW Starterのバージョンアップに追随できなくなる可能性があります。
私の場合、2019年末に初めてRe:VIEW Starterを触って、いくつか上記のような改造をしていました。
2021年3月現在あらためてRe:VIEW Starterでプロジェクトを作成してみると、Re:VIEW Starterで作成されるプロジェクトのlibディレクトリに含まれるRubyで書かれたソースコードのファイル構成などが大きく変わっていました。そのため、前回の変更を新しく作成したプロジェクトに移植するのにやや苦労しました。
Re:VIEW Starterはユーザーガイドの付録Cによれば「2〜3 週間ごとにリリースされ」、「新機能の追加とバグ修正が急ピッチで進」むそうです。
バージョンアップごとの不要なコンフリクトや移植作業を避ける為にも、このような魔改造は避けた方が賢明でしょう*1。