-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWeek4.tex
165 lines (103 loc) · 6.72 KB
/
Week4.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
\documentclass[autodetect-engine,dvipdfmx]{jsarticle}
\usepackage{newpxtext,amsmath,array}
\usepackage[deluxe]{otf}
\usepackage[breakable]{tcolorbox}
\title{設問環境の用意}
\author{東大TeX愛好会}
\date{Week4}
\begin{document}
\maketitle
\begin{abstract}
\TeX を用いて問題を作成したい,問題の解答を作成したい,といった場面は多々あるかと思います。そのような場面で,統一的に大問を作成するためのマクロがあれば便利と考えるのは至って自然なことかと思います。そこで,本記事では大問を作成し,更にページのヘッダーに,そのページ内にある設問の一覧を表示させるためのマクロを作成しました。(本マクロではfancyhdr.styを利用しているので,これらがなければヘッダーへの表示はできません。勿論本文中の設問環境自体はfancyhdr.styを読み込まなくとも機能しますが。)
\begin{description}
\item[追記]環境が切り替わる位置とページが切り替わる位置が一致した場合に正常に動作しないことがあるので,改ページの位置にはご注意ください。
\end{description}
\end{abstract}
\part{新しい環境の定義法}
\LaTeX では\verb@\newenvironment{環境名}[引数の数]{開始定義文(環境の始めに記述する内容)}{終了定義文(環境の終わりに記述する内容)}@というコマンドにより新しい環境を定義することができます。ここで,開始定義文と終了定義文では,単に本文に表示させる文字列の他,何かしらの命令を書き込むこともできます。
例えば,以下の内容で定義された環境sectionaを用いることで,\verb@\section@によって生成される通常の節の最後に「第◯節:××終了」という文字列を表示させることができます。
\begin{tcolorbox}[breakable]
\begin{verbatim}
\documentclass{jsarticle}
\newenvironment{sectiona}[1]{\section{#1}\def\secname{#1}}{\\ \\ \textbf{第\thesection 節:\secname \ 終了}\\ }
\begin{document}
\begin{sectiona}{\TeX の魅力}
\TeX は素晴らしい。
\end{sectiona}
\begin{sectiona}{\LaTeX の魅力}
\LaTeX も素晴らしい。
\end{sectiona}
\end{document}
\end{verbatim}
\end{tcolorbox}
\begin{tcolorbox}
\newenvironment{sectiona}[1]{\section{#1}\def\secname{#1}}{\\ \\ \textbf{第\thesection 節:\secname \ 終了}\\ }
\begin{sectiona}{\TeX の魅力}
\TeX は素晴らしい。
\end{sectiona}
\begin{sectiona}{\LaTeX の魅力}
\LaTeX も素晴らしい。
\end{sectiona}
\end{tcolorbox}
ここで,環境の始めで一旦\verb@\secname@に\verb@#1@の中身,即ち節の名前を格納していますが,これは\verb@\newenvironment@を用いて環境を作成した際,「環境の終わりに記述する内容」の中では\verb@#1@を用いることができないためです。
\part{本設問環境の詳細}
\section{環境名}
今回の設問環境では,環境名としてprobを設定しています。
\section{引数の数}
今回の設問環境では,その設問の名称を与える引数をとりたかったので引数の数を1個としています。
\section{開始定義文}
\begin{tcolorbox}[breakable]
\begin{verbatim}
\stepcounter{probnumber}
\global\expandafter\def\expandafter\pagecont\expandafter{\pagecont \quad ・#1}
\noindent{\LARGE【\theprobnumber】#1}\vspace{0.3cm}\par
\end{verbatim}
\end{tcolorbox}
今回の設問環境では,開始定義文を以上のものにしています。これを順に見ていきます。
まず,環境外で用意した\LaTeX カウンターprobnumberに対し,\verb@\stepcounter{probnumber}@と記述することで,その数を1増やしています。これは,設問番号を1増やしたことに相当します。
続いて,\verb@\global\expandafter\def\expandafter\pagecont\expandafter{\pagecont \quad ・#1}@により,\verb@\pagecont@の末尾に\verb@\ \ ・#1@を追加します。すなわち,ヘッダーに表示する内容である\verb@\pagecont@の末尾に,その設問の設問名を付け加えます。ここで,最初に\verb@\global@をつけてあるのは,\verb@\pagecont@を環境の外であるヘッダーの編集の際に使用するためです。また,\verb@\expandafter@が3回用いられているのは,\verb@\pagecont@の中身を一旦展開して,その末尾に\verb@#1@をつけたものを再び\verb@\pagecont@に格納するためです。(\verb@\expandafter@の使用法他,展開制御に関しては,後の人が詳細にまとめてくれることでしょう)
最後に,\verb@\noindent{\LARGE【\theprobnumber】#1}\vspace{0.3cm}\par@で,本文中に【\verb@\theprobnumber@】,すなわち設問番号と,\verb@#1@,すなわち設問名を大きいサイズで表示させ,縦方向に適当な空白をとって改段落しています。また,\verb@\noindent@を用いることでインデントを防いでいます。
\section{終了定義文}
\begin{tcolorbox}
\begin{verbatim}
\vspace{1.2cm}\par
\end{verbatim}
\end{tcolorbox}
今回の設問環境では,終了定義文を以上のものにしています。この内容で,縦方向に適当な余白をとった上で改段落しています。
\section{ヘッダーの編集}
\begin{tcolorbox}
\begin{verbatim}
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\pagecont \global\def\pagecont{}}
\end{verbatim}
\end{tcolorbox}
fancyhdrというパッケージを用いてヘッダーの編集を行っています。ここでは,まずfancyhdr.styで提供されているページスタイルであるfancyを用います。各ページの左上に,そのページ内にある設問の一覧を表示させたいので,\verb@\lhead{}@の引数として\verb@\pagecont \global\def\pagecont{}@をとり,まずヘッダーに\verb@\pagecont@の中身を表示させた上で,\verb@\pagecont@の中身を空にしています。
\begin{tcolorbox}[breakable]
\begin{verbatim}
\documentclass{jsarticle}
\usepackage{fancyhdr}
\newcounter{probnumber} %設問番号
\def\pagecont{} %ヘッダーの中身
\newenvironment{prob}[1]{%
\stepcounter{probnumber}
\global\expandafter\def\expandafter\pagecont\expandafter{\pagecont \quad ・#1}
\noindent{\LARGE【\theprobnumber】#1}\vspace{0.3cm}\par
}{\vspace{1.2cm}\par}
\pagestyle{fancy}
\lhead{\pagecont \global\def\pagecont{}}
\begin{document}
\begin{prob}{\TeX }
あなたの\TeX への想いを述べよ.
\end{prob}
\begin{prob}{\LaTeX }
あなたの\LaTeX への想いを述べよ.
\end{prob}
\newpage
\begin{prob}{\TeX と\LaTeX }
\TeX と\LaTeX の違いについて述べよ.
\end{prob}
\end{document}
\end{verbatim}
\end{tcolorbox}
\end{document}