TeX Alchemist Online

TeX を使って化学のお仕事をしています。

…… ✂ キリトリセン ✂ …… をつくる

f:id:doraTeX:20171218210955p:plain

この記事は TeX & LaTeX Advent Calendar 201719日目の記事の第2弾です。第1弾はこちら。 18日目はmunepiさんでした。 20日目はdomperorさんです。

申込書などでよく見られる,点線のキリトリセンを作ってみましょう。例えば,こんな感じのやつです。

f:id:doraTeX:20171218192037p:plain

横方向のキリトリセン

横方向の点線キリトリセン

横方向のキリトリセンは,\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}

f:id:doraTeX:20171218193447p:plain

縦方向のキリトリセン

次はこういう縦方向のキリトリセンを考えてみましょう。

f:id:doraTeX:20171218202034p:plain

垂直モードで \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 パッケージを用いた「部分的段組」に対応できません。 そこで,汎用的に使える「段組の仕切り線を変更するパッケージ」を作ってみました。

github.com

このパッケージが提供する \changecolumnseprule により,

  • ドキュメントクラスオプションの twocolumn オプションによる文書全体の段組
  • \twocolumn によるページ途中からの段組
  • multicol パッケージによる部分的段組

のいずれの段組仕切り線も一括で変更できます。

サンプルとして,上記それぞれのパターンについて,段組の仕切り線の種類を

  • 点線
  • 点線+「✂ キリトリセン ✂」の文字
  • ☃線+「✂ キリトリセン ✂」の文字

に変更したサンプルが同梱されていますので,使用例はそちらを参照してください。