概要
親方ProjectさんのC93新刊「ワンストップ!技術同人誌を書こう」巻末に著者紹介を入れたいと伺い,所望の書式がRe:VIEWの機能で実現できなかったので,TeXで書式のひな形を整えました.
そのときにRe:VIEWで空白行を入れようと試行錯誤したときの苦労話をまとめます.
背景
技術書典4の申込締切が近づいています.今回は申込がかなり多いようで,アウトプット媒体として技術同人誌が認知されつつあると考えられます.
そのような流れの中で,初めて技術同人誌を書こうとしている方々に,親方ProjectさんのC93新刊「ワンストップ!技術同人誌を書こう」が好評のようです(私が寄稿した所以外).
当該書籍は著者が9名おり,巻末に著者紹介があります.著者紹介に求められていたのは
- ページ左端にTwitterのアイコンがあり,その右に2行設けて著者名とTwitterアカウント,サークル名とURLを書く
- アイコンの下に自己紹介コメントを書く
という体裁でした.言葉で説明するより見てもらった方が早いですね.
紹介を単純に並べると情報が密になりすぎるので,他著者の紹介とは1行空けた方がよいと判断しました.
Re:VIEWでは画像の横に2行書くことができないようでした.テーブルレイアウトを使うのも憚られるため,embed
ブロックを使ってTeXを書く必要があるように思えました.また,著者の中にTeXを好んで使う人がいないようだったので,申し出て雛形を整えました.
なお,Re:VIEWのバージョンを確認する方法が分からなくて確認できないのですが,インストールしたのは2017年11月下旬で,そのときの最新版がインストールされているはずです.
実装
申し出たときは,TeXのminipage
を使えば5分くらいで終わると見積もっていたのですが,Re:VIEWとTeXを甘く見ていました.確かにアイコンの横に2行で著者名とTwitterアカウント,サークル名を書くのはminipage
がその威力を遺憾なく発揮しましたが,最後の条件,他著者の紹介と1行離すというところで手こずりました.
著者のアイコン,名前,サークル紹介の雛形
TeXのminipage環境を使い,アイコンを配置する部分と著者名等を各部分に分ければ簡単だろうとすぐに思いついたので,実装しました.Re:VIEWに埋め込んだTeXのソースは以下のようになりました.
//embed{
\begin{minipage}{.1\linewidth}
\centering
\includegraphics[width=.75\linewidth]{アイコン画像ファイル}
\end{minipage}
\begin{minipage}{.89\linewidth}
名前\\ %\\は改行._を記述するときは\_
サークル名: %ハイパーリンクは張れない
\end{minipage}
//}
ここにコメントを書く
//embed{~//}
はRe:VIEWのembedブロックと呼ばれると命令で,ブロック内の文字列をそのまま文書中に埋め込みます.Re:VIEWでpdfを作成するときは,文書をTeXに変換し,TeXの処理系を通してpdfを出力するので,TeXのソースを埋め込んでおくとTeXの処理系を通るときにそれが反映される仕組みです.
\begin{minipage}{行の幅}~\end{minipage}
はページの幅を指定した幅に縮める環境です.minipage環境を複数並べると,ページの幅に収まる範囲で横に並べてくれます.ここではページの幅に.1\linewidth
を指定しており,ページ幅の10%のminipageを作っています.ここに著者のアイコンを\includegraphics
で取り込んでいます.
その横には,ページ幅の89%のminipageを設け,そこに名前とサークル名を書くようにしました.
仕上がりはまずまずです.上の図には,わざと上下の文字やアイコンを少しだけ入れています.図から分かるように,どうしても行が詰まってしまいます.見やすいように空白行を入れようとして苦難の道のりが始まります.
空白行との戦い
Re:VIEWの改行命令
Re:VIEWでは改行を複数入れてもそれが無視されます.段落途中で改行するインライン命令として@<br>{}
が用意されているので,embedブロックの上に置いてみました.
他著者の自己紹介
@<br>{}
//embed{
//}
結果は,エラーが出て使えませんでした.
TeXの改行
Re:VIEWの機能で改行を入れるのはあきらめ,embedブロック内で,TeXのコマンドを使うことにしました.
TeXでは\\
を置くことで改行できます.それをembedブロック内に置いてみました.
//embed{
\\
\begin{minipage}{.1\linewidth}
\end{minipage}
\begin{minipage}{.89\linewidth}
\end{minipage}
//}
これもエラーが出ました.
次に \vspace
コマンドを使いました.
//embed{
\vspace{1em}
\begin{minipage}{.1\linewidth}
\end{minipage}
\begin{minipage}{.89\linewidth}
\end{minipage}
//}
スペースの幅には1em
を指定しました.これはMの幅を表すので,水平方向の空白を指定する際に用いるのでしょうが,xの高さを表す1ex
では間隔が大きくなりすぎたので,1em
を使いました.
無事,他著者紹介との間に1行の空白を入れることができました.
著者名等と自己紹介との間隔
著者名等と自己紹介コメントの間が詰まっているので,ここにも\vspace
を使って隙間を設けることにしました.
//embed{
\vspace{1em}
\begin{minipage}{.1\linewidth}
\end{minipage}
\begin{minipage}{.89\linewidth}
\end{minipage}
\vspace{1em}
//}
次の図と比べると分かりますが,変に空白が調整されてしまい,著者名等と自己紹介の間隔が広くなってしまいます.
苦し紛れに\hspace
を使い,間隔を1ex
にしたところ,うまくいきました.
//embed{
\vspace{1em}
\begin{minipage}{.1\linewidth}
\end{minipage}
\begin{minipage}{.89\linewidth}
\end{minipage}
\hspace{1ex}
//}
最終的にどうしたか
試行錯誤するのに疲れたので,もう適当でいいやと投げやりになりました.
他著者紹介との空白は微調整する必要はなく,必ず1行空いていればよいだろうと考え,embedブロック内で\vspace
を使うことを止めました.Re:VIEWでは複数の改行が無視されます.しかし,1文字でも何か書いてあれば改行が無視されることはないので,全角スペースを入れれば改行は無視されず,かつpdfには何も表示されないので,実質的に空白行を入れられるのではないかと思い立ちました.
# @#↑に全角スペースが一つ入力されています.
//embed{
\begin{minipage}{.1\linewidth}
\end{minipage}
\begin{minipage}{.89\linewidth}
\end{minipage}
\hspace{1ex} %試行錯誤していたときの名残でvspaceではなくhspaceになっている
//}
他著者の紹介との間に1行空白行が設けられ,著者名等と自己紹介の間にもほどよく隙間ができました.さらにこれを評価するなら,「著者名等と自己紹介の間隔」が「他著者の紹介との間隔」よりも狭いので,情報のまとまりを表現できてよい体裁だと考えられます.全角スペース最高!
まとめ
Re:VIEWで合同執筆した親方ProjectさんのC93新刊「ワンストップ!技術同人誌を書こう」巻末に著者紹介を入れるために,embedブロックを利用してTeXで雛形を整えました.minipage
を使えば紙面体裁の自由度が上がることが確認できましたが,同時にRe:VIEWで空白行を入れる適切な方法がわからず,試行錯誤を繰り返しました.
まとめると
-
@<br>{}
命令の直下にembedブロックをおいてTeX命令を埋め込むとエラーになる. - embedブロックの最初にTeXの改行命令
\\
を書き,直下にminipage
環境を設けるとエラーになる. -
\vspace
を2カ所で使うと自動調整されて思った通りの空白の高さにならない. - Re:VIEWでは複数回改行して空白行を設けることはできないが,全角スペースを使えば空白行(にみえる行)を設けることができる.
以上,バッドノウハウでした.