いつものマシンではないので
新スレッドになってしまいました.
ようやく課題2がひとつできました.
Yさ さんの投稿されたデータのフォーマットの
index.txt という名のファイルを読み込んで
索引のページ(.dvi)をつくります.
データフォーマットについてすこし注意を...
1行が,
[数字][空白一つ][見出し][改行]
のフォーマットしか想定していません.
[数字] の前に空白をおいたり,区切りにタブを使ったり,
[見出し]を空欄にしたりした場合の動作は未確認です.
見出しには空白文字を含めても構わないですが,
空白文字だけで構成することはできないかもしれません.
こまかな問題点としては,
ページ番号を抑制しないとエラーになることと,
Underfull の Warning がでることです.
そしてさらに最大の欠陥は
見出しに TeX のマクロ名と一致する文字列(def, relax, など)を使ってはいけ
ない
ということです.
見出しは日本語だけにしておいてくださいね.
それでははじまりはじまり...
\newread\indexfile
\openin\indexfile=index.txt
\endlinechar=-1
\nopagenumbers
\newtoks\titles
\newtoks\temp
\titles={}
\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}
\def\push#1#2{
\ifundefined{#1}
\expandafter\edef\csname#1\endcsname{#2}
\titles=\expandafter{\the\titles#1\relax}
\else
\temp=\expandafter\expandafter\expandafter{\csname#1\endcsname}
\expandafter\edef\csname#1\endcsname{\the\temp,#2}
\fi
}
\def\doiterate#1 #2\done{
\push{#2}{#1}
}
\def\whileiterate{
\read\indexfile to \line
\ifx\line\empty
\let\next=\relax
\else
\expandafter\doiterate\line \done
\let\next=\whileiterate
\fi\next
}
\whileiterate
\closein\indexfile
\noindent
\def\titlebox#1{\hbox to .5\hsize{#1\hss}}
\def\showone#1\relax{
\ifx#1\relax\relax
\let\next=\relax
\else
\message{#1 ... \csname#1\endcsname}
#1 \dotfill\ \csname#1\endcsname\break
\let\next=\showone
\fi\next
}
\expandafter\showone\the\titles\relax
\bye
おしまい
=====================
廣島 勉
tsutomu@...