\documentclass{jsarticle}
\usepackage{amsmath}
\newcommand{\qed}{%
\relax\ifmmode
\eqno{%
\setlength{\fboxsep}{2pt}\setlength{\fboxrule}{0.3pt}
\fbox{\rule[2pt]{0pt}{1ex}}}
\else
\begingroup
\setlength{\fboxsep}{2pt}\setlength{\fboxrule}{0.3pt}
\hfill\fbox{\rule[2pt]{0pt}{1ex}}
\endgroup
\fi}
\begin{document}
\title{ 今週のマクロ \\ Week 1 }
\author{ 東大\TeX 愛好会 }
\date{ }
\maketitle
我思う故に我あり.\qed
\[ x^2=y^2+z^2\qed \]
\end{document}
ということで作ってみたのが上記のマクロです.使い方は至って簡単で,証明が終わったところで\qed
を書き込むだけです.amsmath.styが必要ですが,別行立ての数式中でも使用できるようにしてあります(インラインの数式モード$...$
中では使用しないでください).
さて,これは実際のところかなり単純なマクロではありますが,今回は初回ということもあるので,以下では少し丁寧にその"しくみ"を説明していこうと思います.では,今回の目標を明確にしておきましょう.
- "縦長の四角"(以下,白ハルモス記号)を出力する
- 紙面の右端に出力する
- 別行立て数式環境(
\[...\]
など)でも使用可能にする
LaTeXの命令に"囲み枠"を出力するための\fbox
という命令がありますので,今回はこれを使用することにします.この"囲み枠"の中に,しばしば"支柱"として用いられる幅0ptの\rule
(罫線)を入れ込みます.
\rule
命令は
\rule[〈持ち上げ量〉]{〈幅〉}{〈高さ〉}
という書式を持っているので,これをうまく利用して白ハルモス記号の形を調節します(幅は0ptのままにしておく).
\fbox{\rule[2pt]{0pt}{1ex}}
上記の数字は筆者の環境(感覚)で適当な形になるように恣意的に定めたものなので,各自数字を調節して気に入る形にすると良いと思います.
また,白ハルモス記号の大きさや線の太さは\fbox
命令が内部で使用する寸法レジスタの値を変更することで調節できます.その寸法レジスタというのは具体的には\fboxsep
と\fboxrule
で,それぞれ四角の大きさと線の太さを制御できます.LaTeX式にこれらの値を変更するためには,以下のようにします.
\setlength{\fboxsep}{2pt}
\setlength{\fboxrule}{0.3pt}
これらの値も恣意的に定めたものなので,好みに合わせて変えてみてください.
注意:これらの値を普通に変更すると,\qed
命令以外の場面で\fbox
を使用するときもそれらの値が適用されてしまいます.これを避ける場合には,寸法レジスタの変更箇所を局所化する必要があります(\qed
の定義を{...}
または\begingroup ... \endgroup
で囲っておけば良い).
さて,あとはこの記号を右端に出力するようにすれば,テキスト中で使用可能な\qed
命令が完成しますが,これはとても簡単です.\hfill
命令という「横方向に可能な限り大きな空白を空ける」命令があるのでこれを利用します.これまでに作成した白ハルモス記号と合わせて以下のように\qed
命令を定義します.
\newcommand{\qed}{%
\begingroup
\setlength{\fboxsep}{2pt}\setlength{\fboxrule}{0.3pt}
\hfill\fbox{\rule[2pt]{0pt}{1ex}}
\endgroup}
これで,ひとまず使用可能な\qed
命令を作ることができました.しかし,\hfill
命令は数式モード中では効力を発揮しないので,\qed
命令も数式モード中に使用することができません(エラーにはなりませんが,右端ではなく直前の文字のすぐ後ろに出力されてしまいます).
証明が別行立ての数式で終わるということ自体,数学系の出版業界的に褒められたことなのかどうか不明なのですが,少なくとも一般にはそうした需要が少なからずあるだろうということで,これを実装することにしました.ただし,(技術的な問題以前に)レイアウト上の問題で「最後の数式には式番号がつかない」ことを前提としています.
既に述べたように数式モード中では(通常は)\hfill
命令等を使用することはできないので,手動で数式番号をつけるために用意されている\eqno
命令を利用することにします.これを用いれば,別行立ての数式中で使用可能な\mathqed
命令を作成することが可能になります(amsmath.styが読み込まれていないとエラーになります).
\newcommand{\mathqed}{%
\eqno{%
\setlength{\fboxsep}{2pt}\setlength{\fboxrule}{0.3pt}
\fbox{\rule[2pt]{0pt}{1ex}}}}
しかし,\qed
命令と\mathqed
命令を使い分けるのは少々面倒であり,またそうする理由もないので条件分岐を用いてこれを\qed
に統合します.すなわち,TeXのプリミティブ命令に\ifmmode
(if math modeに由来)というのがあり,
\ifmmode
(数式モード中の場合の処理)
\else
(数式モード中でない場合の処理)
\fi
という条件分岐を行うことができるので,これを利用して,冒頭に掲載した\qed
命令が完成します(\ifmmode
を使用する前には\relax
を入れるようにしておくと,予期せぬエラーを防げるようです).
\newcommand{\qed}{%
\relax\ifmmode
\eqno{%
\setlength{\fboxsep}{2pt}\setlength{\fboxrule}{0.3pt}
\fbox{\rule[2pt]{0pt}{1ex}}}
\else
\begingroup
\setlength{\fboxsep}{2pt}\setlength{\fboxrule}{0.3pt}
\hfill\fbox{\rule[2pt]{0pt}{1ex}}
\endgroup
\fi}
今回は初回ということで,比較的単純なマクロでかつある程度実用性のあるものをということでこうした題材を選んでみました.とはいえ,単純な中にもいくつかの仕掛けをしておいたので,ユーザーの工夫次第で様々な応用が可能だと思います.
例えば,今回は「白ハルモス記号」(これは筆者の造語です)で証明終わりを表現しましたが,もとはといえば証明終わりは黒塗りのハルモス記号(∎)を用いるのが伝統的で,その白抜き版の白ハルモス記号はあくまでその代用記号です.ご覧の通り,ハルモス記号にはUnicodeの割り当てU+220E
(∎)がありますが,環境依存文字なので必ずしもすべての環境で出力できるわけではありません.上の紹介文中に登場した命令だけを用いても,このUnicode文字を用いずにハルモス記号を出力するマクロを作成することができます.お時間のある方,実装してみてはいかがでしょうか.