-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWeek2.tex
88 lines (59 loc) · 3.85 KB
/
Week2.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
\documentclass[autodetect-engine,dvipdfmx]{jsarticle}
\usepackage{newpxtext,tcolorbox,amssymb,bm}
\usepackage[deluxe]{otf}
\title{有名な集合}
\author{東大TeX愛好会}
\date{Week2}
\begin{document}
\maketitle
\part{動機}
「そこそこ多くの標準のコマンドを覚え,\LaTeX に慣れてきた人」にはまだ若干実感が湧かないかもしれませんが,長期にわたって書き足したり修正したりする文書を作成するにあたっては「文書のメンテナンス性の高さ」が求められることも多いのではないでしょうか。つまり,後で全体を容易に変更する余地を残した文書作成を意識する必要が出てくるのです。
\part{実践}
今回はそういった「修正を容易にする」発想のごく初歩的な例として,有名な集合を書き表すシンプルなマクロを紹介しましょう。ここでいう有名な集合というのは,自然数,整数,有理数,実数,複素数といった,ラテン文字1字で書き表される集合です。「普通に」やるなら,例えば
\begin{tcolorbox}
\begin{verbatim}
$n\in\mathbf{N}^{+}$,$p\in\mathbf{Q}$,$x\in\mathbf{R}$とする。
\end{verbatim}
\end{tcolorbox}
というコードを処理することで
\begin{tcolorbox}
$n\in\mathbf{N}^{+}$,$p\in\mathbf{Q}$,$x\in\mathbf{R}$とする。
\end{tcolorbox}
と出力することが可能です。しかし,これらの集合の記法には複数の流儀があります。もしかしたら後で「太字イタリックにすべきだ」という要請があって
\begin{tcolorbox}
$n\in\bm{N}^{+}$,$p\in\bm{Q}$,$x\in\bm{R}$とする。
\end{tcolorbox}
と修正したり,或いは「黒板太字にしてほしい」という依頼があって
\begin{tcolorbox}
$n\in\mathbb{N}^{+}$,$p\in\mathbb{Q}$,$x\in\mathbb{R}$とする。
\end{tcolorbox}
に修正することになるかもしれません。こうなるとこれらの集合に使われたすべての\verb@\mathbf@を\verb@\bm@に置き換えなければならないのですが,集合以外でも\verb@\mathbf@を使っていると単純な文字列置換では済まなくなったりして修正が大変です。
そこで,最初に掲げたような「単に出力するための書き方」をするのではなく,まず
\begin{tcolorbox}
\begin{verbatim}
\def\usebbsetcapital{\def\setcapital##1{\mathbb{##1}}}
\def\usebfsetcapital{\def\setcapital##1{\mathbf{##1}}}
\def\usebmsetcapital{\def\setcapital##1{\bm{##1}}}
\usebfsetcapital
\def\setC{\setcapital{C}}
\def\setH{\setcapital{H}}
\def\setN{\setcapital{N}}
\def\setNpos{\setcapital{N}^{\mathord{+}}}
\def\setP{\setcapital{P}}
\def\setQ{\setcapital{Q}}
\def\setR{\setcapital{R}}
\def\setRp{\setcapital{R}^{\mathord{+}}}
\def\setZ{\setcapital{Z}}
\end{verbatim}
\end{tcolorbox}
として処理すると,やはり
\begin{tcolorbox}
$n\in\mathbf{N}^{+}$,$p\in\mathbf{Q}$,$x\in\mathbf{R}$とする。
\end{tcolorbox}
のように出力されますが,これが最初の「単に出力するための書き方」と違うのは,プリアンブルの\verb@\usepackage{my-style}@以降に\verb@\usebmsetcapital@を追加して処理するだけで
\begin{tcolorbox}
$n\in\bm{N}^{+}$,$p\in\bm{Q}$,$x\in\bm{R}$とする。
\end{tcolorbox}
とすべて修正された出力となる点です。つまり,最初から複数の記述方法をとりうるものは一斉に変更できる仕組みにしておこうという考え方です。意味を明示した(セマンティックな)コマンド名にしておけば,コードも見やすくなり,一挙両得!
ただし,セマンティックなコードを目指すあまり複雑なマクロ化を施してしまうと,今度は打つのが大変になりますから,適度な範囲に留めておくことをおすすめします。
\end{document}