[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:12610] Re: to Mac user?
かねこ@ひたちです。いちおう Debian-users にも CC
At 9:20 AM +0900 99.2.7, Atsuhito Kohda wrote:
K:jverb.sty というスタイルファイルが、あるパッケージに必要
K:かもわかりません。それで
K:
K:ftp://ftp.vector.co.jp/pack/mac/writing/other/jverb1.03.cpt.bin
K:
K:に含まれるのはわかっているですが、ご覧のとおり Mac 用の
K:ファイルらしくゲットしたものの展開(?)できません。
K:
K:Mac ユーザの方がおいででしたら、上の中から jverb.sty と、
K:あれば README のようなドキュメント(使用条件を知りたいので)
K:を送って頂きたいのですが。
んー,Compact Pro は Unix でなんとかする方法がないかも知れない。
たいした量ではないので,全部(6つ)付けます。
--- readme.doc --- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
※ jverb.sty ※
※ Ver 1.03について ※
※ ※
※ by やまね ※
※ 98/07/29 ※
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
21Mさんによるjverb.sty(Ver 1.01)に対して、アスキー
日本語LaTeXで使う場合の若干の不具合の修正と、空行の幅が調節できる機
能の追加を行いました。
詳しい使い方や、Ver 1.01以後の変更点などについては、jverb
sty.docをご覧下さい。日本語LaTeXさえ動いていれば、OSには関
係なく使えるはずです(UNIX,MacOS,Windowsなど)。
以下のファイルが含まれています。
readme.doc 当ファイル
jverb.sty スタイルファイル本体
jverbsty.doc jverb.styのドキュメント
jvsample.tex jverb.styの利用例
k2tex2ps jverb.styのおまけ
(但しこれはUNIX専用)
omake.doc 同上のドキュメント
元のものがPDSなので、私による修正後のものもPDSとして配布します。
ご自由にお使い下さい。
やまね 96492406@xxxxxxxxxxxx
--- jverbsty.doc --- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<
Note: This file is written in MS-kanji code(Shift-JIS), with Macintosh-
style end-of-line code(CR only). If you want to read this file on
UNIX or DOS, you must convert Kanji code and/or end-of-line code.
------------------------------------------------------------------------------
jverb.sty
jverbatim環境—日本語文字と英字が2:1の幅になるverbatimライクな環境の定義
v1.03 98/07/29
21M / pxk12131@xxxxxxxxxxxxxxxx (original)
やまね / 96492406@xxxxxxxxxxxx (一部修正)
上記タイトルの通り、verbatim環境に似ているが日本語文字と英字が2:1の幅
になるような「jverbatim環境」を実現する、日本語LaTeX用のスタイルファイル
です。verbコマンドに似た、jverbコマンドというのも用意してあります。
NTT JLaTeX、アスキー日本語LaTeXのいずれでも使えますし、LaTeX2ε(の日本
語版)でも(少なくとも従来のJLaTeX互換の使い方で)使えるはずです。OSには依
存しません。
同様のものが既にありそうな気もしますが、まあ、新たに公開したって害はな
いでしょうから、公開します。
各環境およびコマンドの使い方は以下の通りです。
1. jverbatim環境 使い方: \begin{jverbatim}…\end{jverbatim}
使い方も機能もverbatim環境とほぼ同じですが、日本語文字と英字は2:1の幅
になります。
この他にも、以下のような性質がverbatim環境とは異なります。
[1] タブは無視されず、タブ1つがスペース8つ分(先頭から8の倍数文字目の
位置まで移動する)の働きを持ちます。
[2] jverbatim環境に囲まれた先頭行を見て、その行頭にタブがいくつ現れ
たかを記録しておき、jverbatim環境に囲まれた全ての行の行頭から数
えて、その個数分までのタブは無視します。
性質[2]の例としては、
\begin{quote}
[TAB]\begin{jverbatim}
[TAB][TAB]main()
[TAB][TAB]{
[TAB][TAB][TAB]printf("Hello, World.\n");
[TAB][TAB][TAB]printf("こんにちは、世界。\n");
[TAB][TAB]}
[TAB]\end{jverbatim}
\end{quote}
のような場合(「[TAB]」のところには実際には本物のタブコードが入っているも
のとします)、jverbatim環境に囲まれた先頭行には、行頭にタブが2つあります
ので、jverbatim環境に囲まれたすべての行に対し、行頭から2つまでのタブは無
視します。囲まれた3行目は行頭に3つタブがありますので、先頭2つだけ無視さ
れて残り1つが有効になり、8つ分の空白として出力されます。もしこれを避けた
ければ、
\begin{quote}
[TAB]\begin{jverbatim}
[TAB][TAB]main()
…
のように、先頭行の最初のタブの直前に空白を入れればOKです。
[1][2]のような性質により、日本語を(注釈などに)含むようなプログラムソー
ス類を、インデントをそのまま生かしてTeXの文書中に取り込むのが非常に楽で
す。
なお、AUC-TeX(emacsやmuleエディタ上でTeX文書を編集するためのマクロ集)
をお使いの方は、jverbatim環境を使うようなTeX文書を編集する際には、[2]の
性質を生かすために、初期設定ファイル.emacsに
(setq TeX-auto-untabify nil)
の1行を追加しておく方がよいでしょう(文書中のタブを空白に自動変換しなくな
る)。その他の環境でも同様の注意が必要かも知れません。
タブはデフォルトでは空白8文字分ですが、カウンタ\jvtabstopを設定するこ
とによって変更もできます。例えば
\jvtabstop=4
とやると、タブは空白4つ分となります。
また、\jvemptylinenarrow に何か長さを設定しておくと、jverbati
m環境中に空行が現れた場合、その幅が \jvemptylinenarrow の分だけ縮まりま
す。例えば
\setlength{\jvemptylinenarrow}{2pt}
としておくと、jverbatim環境中の空行の幅が2pt縮まります。(空
白およびタブしか現れない行も「空行」に含まれます)
2. jverbatim*環境 使い方: \begin{jverbatim*}…\end{jverbatim*}
jverbatim環境と同様ですが、空白は、verbatim*環境での空白と同様に出力し
ます(タブも空白に変換されて同様に出力される)。
3. jverbコマンド 使い方: 「\jverb」の次に出力したい内容を同じ文字で
囲んで書く 例…\jverb|cat ファイル名1 ファイル名2|
verbコマンドと同様ですが、verbコマンドとの違いは、英数字などと日本語文
字との間に通常入る「四分空き」が入らないことです。例えば上の例では、verb
コマンドを使うと、「ファイル名」と「1」の間、およびその次の「ファイル名」
と「2」の間に「四分空き」が入ってしまいます。コンピュータのコマンドライ
ンの説明の時などには、このように微妙な間が空いてしまうと、そこを空けて入
力するのか空けないのかあいまいになり、好ましくありません。jverbコマンド
はそれに対処するため作ったものです。
jverbコマンドはjverbatim環境と違い、日本語文字と英字が2:1の幅になるよ
うには作ってありません。2:1の幅にしたければ、中身が1行のjverbatim環境で
代用して下さい。また、タブが無視される点もjverbatim環境とは異なります。
4. jverb*コマンド 使い方: 「\jverb*」の次に出力したい内容を同じ文字で
囲んで書く 例…\jverb*|cat ファイル名1 ファイル名2|
jverbコマンドと同様ですが、空白は、verb*コマンドでの空白と同様に出力し
ます。
- * -
このファイルは、スタイルファイルとして使う他、これ自身を直接、LaTeXの
原稿ファイル(*.tex)の中に取り込んで使うこともできます。その場合の長所は、
「dviファイルのみならずtexファイルも、特定の環境(特定のスタイルファイル
の存在)に依存せず、どこでもコンパイルできるようになる」という点です。
本物のverbatim環境や\verbコマンドと同様、このjverbatim環境や\jverbコマ
ンドも、その実現の仕方の関係上、他のコマンドやマクロの引数の中で使うこと
はできません(他の環境の中で使うことはできます)。どうしても使いたければ、
使いたい内容を一旦boxに代入し、それを他のコマンドの引数で使うという手法
を取ります(磯崎秀樹「LaTeX自由自在」サイエンス社、などを参考にして下さい)。
dviドライバによっては、本スタイルファイルで定義した環境やコマンドで、
空白を大量に出力した場合、位置がずれることがあるようです。例えば、
jverbatim*環境で空白を多く含む出力を行うと、右の方では空白マークが縦に揃
わないことがあります。dviファイルのレベルで解析してみると、ずれていない
ようなので、これはdviドライバの不具合ではないかと思います。
本品はパブリックドメインとします。
※注意事項
1) ASCII日本語LaTeXでは、日本語がゴシックになっている状況でjverbatim環
境やjverbコマンドを使うと、その内部まで日本語がゴシックになってしまいま
す(NTT JLaTeXでは試していません)。例えば「{\bf\jverb|aあ|}」とすると「あ」
がゴシックになります。日本語が明朝に切り替わるようにした方がよいかなとも
思いましたが、普通のverbatim環境やverbコマンドでも同様なのでそのままにし
てあります。\bfは「{ }」で範囲を限定して使うことが多いので、この仕様で問
題が起きることはほとんどないでしょう。
2) verbatim環境と異なり、jverbatim環境の前後では自動的に改段落を「しま
せん」。例えば
abc\begin{jverbatim}
defdef
ghighi
\end{jverbatim}jkl
のような場合、「abc」と「defdef」、「ghighi」と「jkl」は同じ行に来ます。
そうしたくない場合は\parコマンドで明示的に改段落して下さい。
この仕様は、「abc\begin{jverbatim}dあいe\end{jverbatim}fgh」のように、
中身が1行のjverbatim環境をjvebコマンドの代用として使うためのものです(上
記3.の「jverbコマンド」の項参照)。また、「\end{jverbatim}」という文字列
を含むようなものをjverbatim環境で出力したい場合に
\begin{jverbatim}
この文章
は、「\end{jverbatim}」という
文字列を含んでいます。
\end{jverbatim}
とやると途中の「\end{jverbatim}」でjverbatim環境が終わってしまう問題があ
りますが、これを
\begin{jverbatim}
この文章
は、「\end{jver
\end{jverbatim}%
\begin{jverbatim}
batim}」という
文字列を含んでいます。
\end{jverbatim}
のようにして回避するための仕様でもあります(このとき4行目の「\end{jverbatim}%」
の行頭には空白を開けないで下さい)。
また、この仕様のため次のような現象が起こります。
{\baselineskip8pt\begin{jverbatim}
abcabc
defdef
ghighi
jkljkl
\end{jverbatim}}
のような場合、jverbatim環境内の行間は8ptになりますが、最後の2行の間だけ
が通常の行間に戻ってしまいます。これは、\baselineskipの設定は段落の中で
有効(直前の改段落までが\baselineskipの設定の影響の及ぶ範囲)であることと、
「jkljkl」の行の直後に改段落が行われないため、最後の「}」を抜けた時点で
\baselineskipが元に戻ることの影響が「jkljkl」の行の直前にまで及んでしま
うためです。「\end{jverbatim}\par}」のように明示的に改段落すればこの現象
は回避できます。
※変更履歴
1.00→1.01 (by 21M)
・行頭で、\jverb| abc|のように先頭に空白のある出力をjverbコマンドで行
うと、その行の上が不当に空いていたのを直した。
・\jverbは、\verbと違って途中での行折り曲げを必要に応じて行うようになっ
た。その方が便利と作者が判断したため。
・jverbatim環境のタブストップが8に固定だったのを可変にした。
1.01→1.02(by やまね)
・\jvemptylinenarrow を新設し、jverbatim環境中の空行の幅を調
節可能にした。
・以前は、jverbatim環境の中身が数百行(標準的な場合で)を越え
ると、TeX capacity exceededを引き起こしていたが、今
回からは(1行が極端に長くない限り)中身がいくら多くても大丈夫。
・アスキー日本語TeX(の古い版?)のバグのため、これまで同TeXでは
jverbatim環境の中身に『「\」+日本語文字』というものが混じって
いると誤動作していた。これへの対策を行った。
1.02→1.02b(by やまね)
・jverb.styそのものは1.02と全く変わっていない。おまけのk2tex2psの若干
の不具合を手直ししただけ。
1.02b→1.03 (by 21M&やまね)
・内部で使っているマクロが他のスタイルファイルと衝突して問題が起こる場
合があることが判明したため、マクロ名を衝突しにくそうなものに変更。
--- jverb.sty --- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<
%jverb.sty v1.03
%
% by 21M e-mail: pxk12131@xxxxxxxxxxxxxxxx
% Modified by やまね e-mail: 96492406@xxxxxxxxxxxx
%
% This file is in the public domain.
%%%
% Usage:
% \begin{jverbatim}…\end{jverbatim}
% \begin{jverbatim*}…\end{jverbatim*}
% \jverb|…|
% \jverb*|…|
%%%
{%
\let\jvtmp\relax
\let\jvtmp@\relax% if not in .sty, set \jvtmp to @
\ifx\jvtmp\relax \gdef\@jverbinsty{\relax}\fi
}%
\makeatletter
%-----------
\newif\if@jvstrhead\newif\if@jvstrsame
\def\@jveatarg#1\relax#2\relax{}
\def\@jvstrhead#1#2{%
\edef\@jvtmparg{%
#1\noexpand\@jvstrend\relax#2\noexpand\@jvstrend\relax
}%
\expandafter\@jvstrheadsub\@jvtmparg
}
\def\@jvstrheadsub#1#2\relax#3#4\relax{%
\let\@jvnext\@jveatarg
\ifx#1\@jvstrend
\@jvstrheadtrue
\ifx#3\@jvstrend\@jvstrsametrue \else\@jvstrsamefalse \fi
\else
\if#1#3\let\@jvnext\@jvstrheadsub
\else \@jvstrheadfalse\@jvstrsamefalse \fi
\fi \@jvnext#2\relax#4\relax
}
%-----------
\begingroup
{\catcode"D=12\gdef\@jvrawcr{^^M}}
{\catcode"9=12\gdef\@jvrawtab{^^I}}
{\catcode"20=12\gdef\@jvrawspc{ }}
\catcode"5B=1\catcode"5D=2\catcode"21=0
\catcode"7B=12\catcode"7D=12\catcode"5C=12
!gdef!@endjverbatim[end{jverbatim}]%
!gdef!@endjverbstar[end{jverbatim*}]%
!gdef!@jvrawbksl[\]%
!endgroup
\def\@jvmain#1{%
\def\@jvtmparg{#1}%
%\typeout{arg=#1}%
\ifx\@jvtmparg\@jvrawbksl
\let\@jvnext=\@jvsub \def\@jvendcmp{}%
\else
\@jvcharout#1\let\@jvnext=\@jvmain
\fi \@jvnext
}
\newif\if@jvstarmode
\def\@jvsub#1{%
\edef\@jvendcmp{\@jvendcmp#1}\setbox\@jvonecharbox=\hbox{#1}%
% ASCII jTeX(の古い版?)では2バイト文字の比較にバグあり
\ifdim\@jvspclen=\the\wd\@jvonecharbox
\if@jvstarmode \@jvstrhead\@jvendcmp\@endjverbstar
\else \@jvstrhead\@jvendcmp\@endjverbatim \fi
\else \@jvstrheadfalse\@jvstrsamefalse \fi
\if@jvstrhead
\if@jvstrsame
\if@jvstarmode \end{jverbatim*}\else \end{jverbatim}\fi
\let\@jvnext\relax \let\@jvtmparg\empty
\else \let\@jvnext\@jvsub \let\@jvtmparg\empty \fi
\else
\@jvcharout\@jvrawbksl
\let\@jvnext\@jvmain \let\@jvtmparg\@jvendcmp
\fi \expandafter\@jvnext\@jvtmparg
}
\newcount\jvtabstop \jvtabstop=8
\newdimen\jvemptylinenarrow \jvemptylinenarrow0pt
\newif\if@jvnontabfound \newif\if@jvaftercr \newif\if@jvemptyline
\newcount\@jvcurline \newcount\@jvcurcol \newcount\@jvtmpcount
\newcount\@jvigntabs \newcount\@jvigntabcount
\newbox\@jvonecharbox \newdimen\@boxlen \newdimen\@jvspclen
\def\jverbatim{\@jvstarmodefalse\@jvinit}
\def\@jvinit{%
\begingroup\ignorespaces\tt\parindent0pt\mbox{}%
\@jvtmpcount="20\loop\ifnum\the\@jvtmpcount<"7F
\catcode\the\@jvtmpcount=12
\advance\@jvtmpcount by1\repeat
\catcode"9=12\catcode"D=12% \@jvcharout uses following miscs
\@jvcurline=0\@jvcurcol=0\@jvigntabs=0
\@jvnontabfoundfalse\@jvaftercrfalse
\setbox\@jvonecharbox=\hbox{ }\@jvspclen=\the\wd\@jvonecharbox
\@jvmain
}
\def\endjverbatim{\endgroup}
\@namedef{jverbatim*}{\@jvstarmodetrue\@jvinit}
\@namedef{endjverbatim*}{\endgroup}
%-----------
\def\@jvcharout#1{%
\if@jvaftercr
\ifnum\@jvcurline>1
\par \if@jvemptyline \vskip-\jvemptylinenarrow \fi
\parskip0pt\mbox{}%
% \mbox{}は空行に警告が出ないためと行頭の空白有効化
% \hbox{}だと行が余分に空く(\par直後だから)
% 最初の改行以後は\parskipを0にしておく
\else\relax \fi
\else
\ifx\@jvtmparg\@jvrawspc\hbox{}\fi
\fi
%\typeout{arg:#1}%
\def\@jvtmparg{#1}%
\ifx\@jvtmparg\@jvrawcr
\advance\@jvcurline by1 \@jvaftercrtrue
\ifnum\@jvcurcol=0 \@jvemptylinetrue \else\@jvemptylinefalse\fi
\@jvcurcol=0 \@jvigntabcount=\@jvigntabs
\else\ifx\@jvtmparg\@jvrawtab
\ifnum\@jvcurline=0\advance\@jvcurline by1\fi \@jvaftercrfalse
\if@jvnontabfound
\ifnum\@jvigntabcount=0 \loop
\if@jvstarmode \@jvrawspc
\else \hskip\@jvspclen \fi
\advance\@jvcurcol by1 \@jvtmpcount=\@jvcurcol
\divide\@jvtmpcount by\jvtabstop
\multiply\@jvtmpcount by\jvtabstop
\ifnum\@jvtmpcount<\@jvcurcol \repeat
\else
\advance\@jvigntabcount by-1
\fi
\else
\advance\@jvigntabs by1
\fi
\else
\ifnum\@jvcurline=0\advance\@jvcurline by1\fi \@jvaftercrfalse
\@jvnontabfoundtrue\@jvigntabcount=0
\setbox\@jvonecharbox=\hbox{#1}%
%\typeout{width(#1)=\the\wd\@jvonecharbox}%
\ifx\@jvtmparg\@jvrawspc
\if@jvstarmode\@jvtmparg \else\hbox{ }\fi
\advance\@jvcurcol by1
\else\ifdim\@jvspclen=\the\wd\@jvonecharbox
%\tt環境のことしか考えていない
#1\advance\@jvcurcol by1
\else
\makebox[2\@jvspclen]{#1}\advance\@jvcurcol by2
\fi\fi
\fi\fi
}
%-----------
\def\jverb{% タブ・改行は特別扱いなし
\begingroup\tt\@jvcurcol=0
\@jvtmpcount="20\loop\ifnum\the\@jvtmpcount<"7F
\catcode\the\@jvtmpcount=12
\advance\@jvtmpcount by1\repeat
% 全文字を非特殊にしてから次の文字を読む
\setbox\@jvonecharbox=\hbox{ }\@jvspclen=\the\wd\@jvonecharbox
\@jv
}
\def\@jv#1{%
\if#1*\let\@jvnext\@jvstar
\else \def\@jvendchar{#1}\@jvstarmodefalse \let\@jvnext\@jvlmain
\fi \@jvnext
}
\def\@jvstar#1{\def\@jvendchar{#1}\@jvstarmodetrue \@jvlmain}
\def\@jvlmain#1{%
\def\@jvcurchar{#1}\ifx\@jvcurchar\@jvendchar
\let\@jvnext\endgroup
\else
\ifdim\@jvspclen=\the\wd\@jvonecharbox
\setbox\@jvonecharbox=\hbox{#1}%
\ifdim\@jvspclen=\the\wd\@jvonecharbox \relax
\else\hskip0pt \fi
\else
\setbox\@jvonecharbox=\hbox{#1}%
\ifdim\@jvspclen=\the\wd\@jvonecharbox \hskip0pt\fi
\fi
\ifx\@jvcurchar\@jvrawspc
\ifnum\@jvcurcol=0 \hskip0pt\fi
% \hbox{}だと行頭で使った場合に余計に改行が入る?
\if@jvstarmode #1\else\hbox{}\hskip.5em\fi
% 単なる空白だと「:」の直後の空白が空き過ぎる
% (jverbatim環境の方は大丈夫。なぜ?)
% \hbox{ }だと途中での改行ができず不便
\else
#1%
\fi \let\@jvnext\@jvlmain
\fi \@jvcurcol=1\@jvnext
}
%-----------
\ifx\@jverbinsty\undefined \makeatother \fi
--- k2tex2ps --- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<
:
# k2tex2ps by やまね (96492406@xxxxxxxxxxxx)
# attached to jverb.sty v1.02b
# 日本語を含むテキストファイルをPostscriptに変換します。
# jverb.styを利用し、一旦TeX経由で変換します。
# jverb.sty、nkf(または同等の能力の漢字コンバータ)、jgawk、
# 日本語LaTeX、dvi2ps(あるいはjdvi2kps)が必要です。
# Usage: k2tex2ps [ファイル名…]
KCONV='nkf -e'
JLATEX='jlatex'
DVI2PS='dvi2ps'
LINELEN=96
PAPER=a4
TABCOL=8
TMPDIR=/tmp/.pstmp_$$
rm -rf "$TMPDIR"
mkdir "$TMPDIR" || {
echo "$0: Can't mkdir $TMPDIR" . 1>&2
exit 1
}
trap 'cd /tmp; rm -rf "$TMPDIR"' 0 1 2 3 15
VALIDLIST=' -~ -〓∈-∩∧-∃∠-∬Å-¶◯-◯0-9A-Za-zぁ-んァ-ヶ'
VALIDLIST="$VALIDLIST"'Α-Ωα-ωА-Яа-я─-╂亜-腕弌-熙'
$KCONV ${1+"$@"} > "$TMPDIR"/tmp.txt || exit 1
# 1バイトカナの2バイト化はこの段階で行われると前提
cd "$TMPDIR"
cat << EOF > tmp.tex
\\ifx\\gtfam\\undefined
\\documentstyle[jverb]{j-article}
\\input $PAPER
\\else
\\documentstyle[${PAPER}j,jverb]{jarticle}
\\fi
\\setlength{\\textwidth}{159.2mm}
\\setlength{\\oddsidemargin}{0in}
\\setlength{\\textheight}{266.5mm}
\\setlength{\\topmargin}{-23.5mm}
\\pagestyle{empty}
\\jvtabstop=$TABCOL
\\begin{document}
\\setlength{\\baselineskip}{4.037mm}
\\begin{jverbatim}
EOF
jgawk -vLINELEN=$LINELEN '
BEGIN{
for(i = 1; i < 128; i++) ind = ind sprintf("%c", i)
}
{
sub(/[ \t ]+$/, "")
$0 = detab($0)
$0 = dectrl($0); gsub(/[^'"$VALIDLIST"']/, "〓")
$0 = fold($0, LINELEN)
gsub(/\\end{jverbatim}/, "\\end{jver\n" \
"\\end{jverbatim}%\n\\begin{jverbatim}\nbatim}")
print
}
function detab(s, l){
while(match(s, /\t+/)){
l = l substr(s, 1, RSTART - 1)
l = l sprintf("%" \
(RLENGTH * 8 - length(l) % 8) "s", "")
s = substr(s, RSTART + RLENGTH)
}
return l s
}
function dectrl(s, l, c){
while(match(s, /[\0-\037\177]/)){
c = index(ind, substr(s, RSTART, 1))
c += (c < 64 ? 64 : -64)
l = l substr(s, 1, RSTART - 1) sprintf("^%c", c)
s = substr(s, RSTART + 1)
}
return l s
}
function fold(s, len, h, l){
while(length(s) > len){
h = jbsubstr(s, 1, len)
# multybyte-extention版jgawkでは
# 単なるsubstr()で代用できる
l = l h "\n"; s = substr(s, length(h) + 1)
}
return l s
}
function jbsubstr(s, i, l, h){
# 位置及び長さはバイトで数えるが、2バイト文字の途中で切らない、
# substrの変種。multibyte extention版の
# jgawkでは単なるsubstrで代用して構わない。
return jbstrleft(substr(s, length(jbstrleft(s, --i)) + 1), l)
}
function jbstrleft(s, l, h, t){ # used in jbsubstr()
while(l > 1){
h = jsubstr(s, 1, l/2); t = t h
l -= length(h); s = substr(s, length(h) + 1)
}
if(l){
h = jsubstr(s, 1, 1)
if(length(h) <= l) t = t h
}
return t
}
' tmp.txt >> tmp.tex; rm tmp.txt
cat << EOF >> tmp.tex
\\end{jverbatim}
\\end{document}
EOF
$JLATEX tmp < /dev/null > /dev/null && $DVI2PS tmp 2>/dev/null || {
echo "$0: Unknown error while processing by $JLATEX and $DVI2PS" 1>&2
exit 1
}
--- jvsample.tex --- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<
% jverb.sty利用のサンプルです。
% まずNTT JLaTeXかどうかの判定 (これはjverb.styの使用とは関係ありません)
\newif\ifNTT \NTTfalse
\ifx\gtfam\undefined\ifx\gtfamily\undefined \NTTtrue \fi\fi
\ifNTT % NTT JLaTeX
\documentstyle[jverb]{j-article}
\input a4%なくなった?
\else % ASCII JLaTeX
\documentstyle[a4j,jverb]{jarticle}
\fi
\def\lnarrow{\addtolength{\baselineskip}{-2pt}}
\begin{document}
\section{サンプル文書}
プログラムspcut.awkを下記に示す。このプログラムは、実行にはjgawkが
必要である。あらかじめjgawkを用意しておき、
\begin{quote}
\jverb/% jgawk -f spcut.awk -- [-オプション] [ファイル名1 ファイル名2…]/
\end{quote}
として使う。注意点は、云々云々云々云々云々云々云々云々云々云々云々云々
云々云々云々云々云々云々云々云々…である。
\begin{quote}\lnarrow
\begin{jverbatim}
# 初期処理(オプション解析など)
BEGIN{
STDERR = "/dev/stderr"
ctlchars = "[\0-\010\012-\032\034-\037\177]"
# デフォルト値設定
maxspcut = 2
# 環境変数SPAWKOPTSのオプション解析
spawkenv = ENVIRON["SPAWKOPTS"]
if(spawkenv ~ /^".*"$/) gsub(/^"|"$/, "", spawkenv)
maxenvopt = split(spawkenv, envopt)
for(i = 1; i <= maxenvopt; i++){
if(parse_opt(envopt[i]) == 0) usage()
}
# コマンド引数のオプション解析
for(argind = 1; argind < ARGC; argind++){
# オプション解析専用関数parse_optを呼んでいる
if(parse_opt(ARGV[argind]) != 0){
ARGV[argind] = ""
# 空文字列を代入することによって
# この引数をファイル名として扱わないようにする
} else
if(ARGV[argind] ~ /^--$/){ # 「--」はオプションの終わり
ARGV[argind] = ""
break
} else
if(ARGV[argind] ~ /^-./){
# 「-」で始まるもので、正規のオプション以外のものを
# 不正オプションとしてエラーを起こす。但し
# 「-」だけの場合は、最初のファイル引数として「-」
# (標準入力を表す)が指定されたものとし、不正扱いしない
usage()
} else {
\end{jverbatim}\\
\hspace*{10em}$\vdots$
\end{quote}
\end{document}
--- omake.doc --- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
※ jverb.styのおまけ ※
※ k2tex2psについて ※
※ ※
※ by やまね ※
※ 97/07/23 ※
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
jverb.styのおまけとして、k2tex2psというシェルスクリプ
トを付けておきました。(注:jverb.styはOS非依存ですが、本k2
tex2psはUNIX専用です。)
これは、日本語のテキストファイルをPostScriptに変換するもので
す。つまり、a2psやk2psなどといったものと同様の働きです。が、それ
を、何とわざわざ一旦TeXを経由して行おうというものです。
k2tex2psの原理は、一旦、jverb.styのjverbatim
環境で入力ファイル全体を囲んだ形のTeXファイルを作り、それをTeX+d
vi2psでPostScript化します。jverbatim環境を使うの
で、日本語と英字の幅は2:1になります。
遅いですし、実用性も薄いと言わざるを得ませんが(^^;)、例えば、以下の条
件を全て満たすような珍妙な状況ではもしかしたら役に立つかも知れません。
○PostScript専用のプリンタにテキストを出力したい
○a2psもk2psもとりあえず使える状況にない
○その代わり日本語TeXとdvi2psならある
k2tex2psは、多分UNIXならどこでも使えると思います。但し、以
下のものが必要です。
jverb.sty
nkf(または同等の能力の漢字コンバータ)
jgawk
日本語LaTeX
dvi2ps(あるいはjdvi2kps)
また、使用に先立ってまず
chmod a+x k2tex2ps
を実行して、k2tex2psを実行可能にしておいて下さい。
使い方は
k2tex2ps [ファイル名…]
です。PostScriptへの変換結果を標準出力に吐くので、必要に応じて、
パイプでプリンタに送るなり、ファイルへリダイレクトするなりして下さい。
入力ファイルの漢字コードは何でも構いません(最初にnkfで変換されるの
で)。
nkf以外の漢字コンバータを使う場合、あるいはdvi2psでなくjdv
i2kpsを使う場合は、k2tex2psの先頭部分をエディタで書き換えて
下さい。
TeXでは1バイトカナは扱えません。このためk2tex2psでは、入力
ファイルを漢字コンバータに通す段階で、1バイトカナが2バイトカナに変換さ
れるものと前提しています。この前提を満たす漢字コンバータは、nkfの他に
は例えば、DOS用ツール「UNIX−like tools」のセットに含ま
れているyakc(但し、−k2オプション付き)などがあります。逆に、nk
fでも古いものは1バイトカナを扱えませんので、その場合は新しいnkfを入
手するなどの対処が必要となります。もっとも、入力に1バイトカナを混ぜない
なら、1バイトカナを扱えないコンバータでも全く困りません。
jverb.sty本体と同様、このおまけもPDSとしておきます。
やまね 96492406@xxxxxxxxxxxx
※変更履歴
1.02→1.02a
・最後に一時ディレクトリを削除する時、そのディレクトリをカレントにした
まま削除しようとしていたため、多くのUNIXでそれができていなかった不具
合を直した。
1.02a→1.02b
・普通のページプリンタと同様、1ページ66行になるように、ページサイズ
などを調整した。
--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8<--- 8< --- 8<---
--
Seiji Kaneko seiji@xxxxxxxxxxxxxxxxxxx
-------------------------------- http://plaza25.mbn.or.jp/~efialtes