この記事は TeX & LaTeX Advent Calendar 2017 の19日目の記事の第2弾です。第1弾はこちら。 18日目はmunepiさんでした。 20日目はdomperorさんです。
申込書などでよく見られる,点線のキリトリセンを作ってみましょう。例えば,こんな感じのやつです。
横方向のキリトリセン
横方向の点線キリトリセン
横方向のキリトリセンは,\leaders
系のプリミティブを使えば簡単です。例えば上記のサンプルは,
\makeatletter % \cdotsfill[#1] % #1: 点同士の間隔 \newcommand{\cdotsfill}[1][.25zw]{\leavevmode\cleaders\hb@xt@#1{\hss$\cdot\m@th$\hss}\hfill\kern\z@\ignorespaces} \makeatother
のように定義して,
\noindent\cdotsfill ~✂~キリトリセン~✂~\cdotsfill\par
とすることでキリトリセンを出力しています。
なお,はさみのマーク ✂ は,upLaTeX なら U+2072 を直接入力すればいいですし,pLaTeX なら otf パッケージの \ajRightScissors
を使うのが簡単でしょう。
横方向の☃線キリトリセン
キリトリセンを点線ではなく scsnowman
パッケージのゆきだるま☃で作りたい場合も同様です。
%!uplatex \documentclass[uplatex,dvipdfmx]{jsarticle} \usepackage{scsnowman} \makeatletter \newcommand{\snowmanfill}[1][]{\leavevmode\cleaders\hb@xt@1zw{\hss\scsnowman[#1]\hss}\hfill\kern\z@\ignorespaces} \makeatother \begin{document} \noindent\snowmanfill[arms,muffler,hat,adjustbaseline,scale=1.4]~✂~キリトリセン~✂~\snowmanfill[arms,muffler,hat,adjustbaseline,scale=1.4]\par \end{document}
縦方向のキリトリセン
次はこういう縦方向のキリトリセンを考えてみましょう。
垂直モードで \leaders
系のプリミティブを使えば「縦方向埋め尽くし」は可能ですが,それをどのようにして文書中に仕切り線として自然に出力させればよいでしょうか。
ヘッダやフッタから点線を伸ばす策
一つの手としては,適当な高さを持つ \vbox
の中に \leaders
で埋め尽くし,そのボックスを中央ヘッダや中央フッタからはみ出して配置するという手が考えられます。例えば上記のサンプルは次のソースで作りました。
%!uplatex \documentclass[uplatex,dvipdfmx,landscape,twocolumn]{jsarticle} \usepackage[margin=1cm,dvipdfm]{geometry} \columnsep=4zw \makeatletter \def\tensenfill{\cleaders\hbox{\rule{0pt}{5pt}.}\vfil} \newbox\tensenbox \setbox\tensenbox\vbox to \textheight{\tensenfill\hb@xt@\z@{\hspace{-.38zw}\mbox{\tate ~✂~キリトリセン~✂~}}\tensenfill} %%% \textheight と同じ高さのボックスに点を敷き詰める \makeatother \usepackage{fancyhdr} \pagestyle{fancy} \renewcommand{\headrulewidth}{0pt} \cfoot{\leavevmode\lower-\footskip\hbox{\smash{\usebox\tensenbox}}}%%% 中央フッタから縦長のキリトリセンボックスをはみ出してかぶせる \begin{document} ☃Conf 2018に参加をご希望の方は,右の申込書にご記入の上,所定の期日までに☃Conf実行委員会宛にご返送ください。 \newpage \begin{center} \huge 申 込 書 \end{center} \vspace{5mm}氏名:\underline{\hspace{10zw}}\par \vspace{5mm}住所:\underline{\hspace{30zw}}\par \vspace{5mm}\hspace{3zw}\underline{\hspace{30zw}} \end{document}
他の段組の実装法への対応: changecolumnseprule パッケージ
上記の方法では,\twocolumn[……]
を用いた「ページ途中からの段組」や,multicol
パッケージを用いた「部分的段組」に対応できません。
そこで,汎用的に使える「段組の仕切り線を変更するパッケージ」を作ってみました。
このパッケージが提供する \changecolumnseprule
により,
- ドキュメントクラスオプションの
twocolumn
オプションによる文書全体の段組 \twocolumn
によるページ途中からの段組multicol
パッケージによる部分的段組
のいずれの段組仕切り線も一括で変更できます。
サンプルとして,上記それぞれのパターンについて,段組の仕切り線の種類を
- 点線
- 点線+「✂ キリトリセン ✂」の文字
- ☃線+「✂ キリトリセン ✂」の文字
に変更したサンプルが同梱されていますので,使用例はそちらを参照してください。