最終更新:2017-07-12 (水) 03:45:11 (465d)

TeX用語集

plain TeX 入門

plain TeX の入門書は A Gentle Introduction to TeX というのがあります。書籍としては Knuth による公式マニュアル &amazon(4756100104); とか、エイブラハムによる &amazon(479529643X); がとても分かりやすいです(Amazon では 2005/01/05 現在で売り切れ中)。

plain TeX 入門

e-upTeX のインストールが完了したら、とりあえず、plain TeX で遊んでみましょう。やり方は簡単です。
Windows ならば [スタート] ボタンの右側にある Cortana の検索ボックスに表示されている [何でも聞いてください] に 「powershell」 を入力して <ENTER> キーを押します。
Cortana の検索ボックスがなければ、 "Windows" キーを押しながら 'R' キー を押してください。
そうすれば、"ファイル名を指定して実行"ウィンドウが 現れます。
[ファイル名を指定して実行] の [名前] に 「powershell」 を入力して 'OK' ボタンを 押してください。
PowerShell が起動します。
赤い文字はユーザーが入力する文字、"<ENTER>" は改行キーを押すことを意味します。

と、ここでおもむろに、"euptex" と打ち込んで <ENTER> キーを押します。そうすれば、

D:\hoge> euptex <ENTER>
This is e-upTeX, Version 3.14159265-p3.7.1-u1.22-161114-2.6 (utf8.uptex) (TeX Live 2017/W32TeX) (preloaded format=euptex)
 restricted \write18 enabled.
**

なにやら "This is e-upTeX, Version 3.14159265-p3.7.1-u1.22-161114-2.6 (utf8.uptex) (TeX Live 2017/W32TeX) (preloaded format=euptex)" などと表示されました。
これは TeX の日本語版である pTeX を内部 Unicode 化した upTeX に e-TeX の機能を追加した "e-upTeX" である、という意味です。
そのバージョンは 3.14159265 である、とも書いてあります。
この 3.14159265 って どこかで見たことありませんか?
そうです円周率の π です。
Knuth 博士も なかなかしゃれております。
円周率は現在の計算機でもその解が求められないほ どの桁を持っています。
そこでその円周率を用いてバージョンを表せば永遠にバージョンアップが可能なのです。
考えましたね。
しかし、Knuth 博士がなくなら れたら、この TeX のバージョンは π に固定されてしまうんですがね。

おっとっと、話が脱線してしまいましたが、本題です。
次の行にアスタリスク * が二つ並んだ状態 "**" と表示されています。
このアスタリスクが二つある状態は ユーザーからファイルを入力することを促しています。
たとえば、"hoge.tex" と か "foo.tex" なんかです。
ここではファイルからの入力ではなく、直接キーボード から、標準入力から読み込ませてあげます。
どのようにすればよいかというと "\relax" と入力してあげます。そうすれば、

This is e-upTeX, Version 3.14159265-p3.7.1-u1.22-161114-2.6 (utf8.uptex) (TeX Live 2017/W32TeX) (preloaded format=euptex)
**\relax <ENTER>

*

のようになるでしょう。このアスタリスクが一つの状態 "*" がユーザーからの キーボードからの入力を待つ状態です。
さあ、準備は整いました。
では基本中の基 本、"Hello,World!!" と打ち込んでみましょう。

*Hello, World!! <ENTER>

*

そうすれば、もう一度アスタリスクが1つの状態になりました。
いったい何が起き たのか、ユーザーにはわかりませんが。
とりあえず、これで終わりです。
入力の終 わりを告げるために "\end" と打ち込みましょう。

*\end <ENTER>
[1]
Output written on texput.dvi (1 page, 228 bytes).
Transcript written on texput.log.

D:\hoge>

"Output written on texput.dvi" といっています。
texput.dvi というファイルに 出力を書き込みましたよ、という意味です。
\end の直ぐ後の `[1]' はページ数を 表しています。
ここでは 1 ページ目の組版が終わったことを示します。
ここで おもむろに "dvipdfmx texput.dvi" と打ち込んでみましょう。

D:\hoge> dvipdfmx texput <ENTER>

dvipdfmx を使用すると DVI ファイルが PDF ファイルに変換されます。
"start texput.pdf" と打ち込んでみましょう。

D:\hoge> start texput.pdf <ENTER>

Microsoft Edge などの PDF ビューアがインストールされていて PDF ファイルに関連付けされていれば PDF ファイルが表示さ れるはず。
これでだめならば、"D:\hoge" という場所を以下のコマンド "explorer ." (ピリオドが重要) で表示すれば Microsoft Edge のアイコンの "texput.pdf" というファイルがあるはずです。

D:\hoge> explorer . <ENTER>

これであなたも立派な TeX ユーザーです。
おめでとうございます。
しかし、 これだけではちょっとさびしい。
TeX が得意とする数式の入力をしてみたいと 思うはず。

D:\hoge゚> euptex <ENTER>
This is e-upTeX, Version 3.14159265-p3.7.1-u1.22-161114-2.6 (utf8.uptex) (TeX Live 2017/W32TeX) (preloaded format=euptex)
**\relax <ENTER>
*Hello, World!! <ENTER>
*$ \sum = \int $ <ENTER>
*Good bye!! <ENTER>
*\end <ENTER>
[1]
Output written on texput.dvi (1 page, 324 bytes).
Transcript written on texput.log.
D:\hoge> dvipdfmx texput <ENTER>
D:\hoge> start texput.pdf <ENTER>

とここまでくれば、日本語を入力したくなるでしょう。
できますよ、もちろん。
PowerShell で <ALT> キーを押しながら <半角/全角> キーを押してく ださい。
そうすれば漢字での入力が可能になります。
英数字の入力に戻りた いときはもう一度同じことをします。
ウィンドウの下のほうに "全あ般ローマ" と 表示されていれば OK です。

D:\hoge> euptex <ENTER>
This is e-upTeX, Version 3.14159265-p3.7.1-u1.22-161114-2.6 (utf8.uptex) (TeX Live 2017/W32TeX) (preloaded format=euptex)
**\relax <ENTER>
*こんにちは、みなさん。 <ENTER>
*\end <ENTER>
[1]
Output written on texput.dvi (1 page, 324 bytes).
Transcript written on texput.log. 
D:\hoge> dvipdfmx texput <ENTER>
D:\hoge> start texput.pdf <ENTER>

はい、できましたか?
できたら、なんとなく、TeX とは何かつかめたのではない でしょうか。
要するに PowerShell (ターミナル)からでも責めることがで きる、すごい組版機構なんです。

さて、端末から入力せずに、次のようなファイル hoge.tex を作成してみましょう。

一般に複素数は $z = x + iy$ で表せるが、$ z = \cos\theta + i\sin\theta$ 
でも表せることが知られている。また、オイラーの公式で 
$e^{i\theta} = \cos\theta + i \sin\theta$ という重要な式もある。 
\bye

これを

D:\hoge> euptex hoge

とすると

This is e-upTeX, Version 3.14159265-p3.7.1-u1.22-161114-2.6 (utf8.uptex) (TeX Live 2017/W32TeX) (preloaded format=euptex)
(./hoge.tex [1] )
Output written on hoge.dvi (1 page, 688 bytes).
Transcript written on hoge.log.

というメッセージが表示され、組版が完了します。

なんだか、回りくどい方法をとりましたが。

plain TeX で LaTeX もどき

まぁ、plain TeX から自分で LaTeX を実装するのも面白いでしょう。

% filetype: plain tex only 
\catcode`\@ = 11 \relax
%
% allocations
\newcount \cnt@enum@i
\newcount \cnt@section@i
%
%CMD: \stepcount {<counter_name>}
\def \stepcount#1{%
  \expandafter \advance \csname cnt@#1\endcsname 1\relax}
\def \usecount#1{\expandafter \kansuji \csname cnt@#1\endcsname}
%
%CMD: \TeXorigEnd := \end
\let \TeXorigEnd = \end
%CMD: \begin {<env>}
\def \begin#1{\csname #1\endcsname \bgroup}
%CMD: \end {<env>}
\def \end#1{\egroup \csname end#1\endcsname}

%CMD: \newenvironment {<env>}{<begin>}{<end>}
\long \def \newenvironment#1#2#3{%
  \expandafter \def \csname #1\endcsname {#2}%
  \expandafter \def \csname end#1\endcsname {#3}%
}
%CMD: \goodbye
\def \goodbye {\vfill This document was made with plain \TeX.\null}
%
%ENV: document
\newenvironment {document}
  {% page layout parameters setting
  \baselineskip = 18.0 pt \relax
  \parindent = 1 zw \relax
  \vsize = 38 \baselineskip \relax
  \hsize = 44 zw \relax}
  {\TeXorigEnd}
%ENV: math
\newenvironment {math}{$}{$}
%ENV: displaymath
\newenvironment {displaymath}{$$}{$$}
\def\({$}%$
\def\){$}%$
\def\[{$$}%$$
\def\]{$$}%$$
%
%ENV: itemize
\newenvironment {itemize}
 {\def \itemi {\par \hskip 2 zw $\bullet$\space}}
 {\par}
%
%ENV: enumerate 
\newenvironment {enumerate}
  {\cnt@enum@i = 0 \relax
  \def \itemi{\par \hskip 2 zw 
  \stepcount {enum@i}%
  \usecount {enum@i}.\space}}
  {\par}
%
%CMD: \font@family 
\def \font@family {jis }
%
%CMD: \mcfam (Mincho Family)
\def \mcfam {\gdef \font@family {jis }}
%CMD: \gtfam (Gothic Family)
\def \gtfam {\gdef \font@family {jisg }}
%
%CMD: \fontsize {0--5} {<stuff>}
\def \fontsize#1#2{%
  \bgroup
    \font \temp@font@size = \font@family scaled \magstep #1 \relax
     \temp@font@size #2
  \egroup
}
%
%CMD: \author {<author>}
\def \author#1{\gdef \@@author {#1}}
%CMD: \title {<title>}
\def \title#1{\gdef \@@title {#1}}
%CMD: \date {<date>}
\def \date#1{\gdef \@@date {#1}}
%
%CMD: \maketitle 
\def \maketitle {%
  \centerline {\fontsize {2} {\@@title}}\relax
  \centerline {\@@author}\par \vskip 5 pt\relax
  \centerline {\@@date}\par \vskip 10 pt\relax
}
%
%CMD: \myvrule
\def \myvrule {\vrule width 1ex}
\def \myhrule {\vrule depth -0.5zw height 0.6zw width 3zw}
\long \def \sectionskip {\par \vskip.5\baselineskip}
\def \myhskip {\hskip1zw}
%
%CMD: \section #1.
\def\section#1.{%
  \stepcount{section@i}%
  \sectionskip
  \par\noindent {%
    \hbox to \hsize {%
      \myvrule \myhskip \gtfam \fontsize{2}{%
         \@section@prefix \usecount {section@i}\@section@postfix
         \myhskip #1}%
      \hfill \myhrule \myvrule
    }%
  }%
  \sectionskip
}
%
%CMD: \@section@prefix
\def \@section@prefix  {第}
\def \@section@postfix {節}
%
\catcode`\@ = 12 \relax
%
\begin{document}

\title  {使いやすいシステムの設計思想}
\author {渡辺徹 (Th\'or Watanabe)}
\date   {2005/12/01}
\maketitle
\section インタフェースの原理と限界.

人間の生体的な制約から来る問題は物理的に存在するインタフェース

一応ドキュメントを生成しやすいように、何かの工夫をします。

cat hoge.tex | grep -e '^\%'

とかね。