charset=euc-jp
http://ffeck.tsuchigumo.com/

■HP蜘蛛夢■


(初版2001.1.17;微修正2014.10.23;更新2002.4.10)

空白と改行が無視されるので、そのままではダメ




MS-DOSのときから、たいていの文章はワープロではなく、 エディターで作って印刷ソフトで出力していました。Linuxを使う ようになったので、印刷ソフトはplatex2eを使おうと思いました。 しかし初めからLaTeX出力を意識して書いた文章ではない場合は、 空白と改行が無視されるので、そのままではダメです。
\begin{verbatim}
テ
    キ
        ス
            ト
\end{verbatim}
とすれば空白と改行はテキストの通りになるのですが、 これではplatexの機能はほとんど使えません。 文字サイズくらいは指定したいのです。

plain2というソフトでlatex化する方法もあります。 しかし結構凝った変換をするので意外な結果になったりします。

ほかにも問題があります。

LaTeXのデフォルトのマージンが広すぎるのでエディターで 半角80桁改行で作った文章が収まらず、出力が違ってしまうのです。

こうしたことについて、多分、ちゃんと対応しているオプション などが既にあるとは思ってたのですが詳しいマニュアルを持っていない ので、応急対策でマージンと空白と改行を処理したシェルスクリプト のメニューを作りました。

後で本屋でLATEXの本を見ていたらallttというパッケージのことが 書いてあって、verbatimのように使えて、しかも中でLaTeXコマンド が有効だとありました。

LaTeXを意識しないでエディターで作った文章を手軽に見たままに 近いレイアウトでLaTeXを利用して印刷するということに少しは利点 があると思うのでallttも使うように変えてシェルスクリプトのメニュー にまとめてみました。

【設定】

以下のシェルスクリプト部分を切り取り、t という名前のファイルを作ります。 1文字のファイルが気に入らないならaliasを使ってください。 chmodコマンドで実行可能にします。 自分のディレクトリに ~/bin というディレクトリを作って t を移します。 このディレクトリにはパスを通しておきます。

LaTeXで特殊な意味を持つ文字を変換するために、 下記のsedスクリプト(1)を切り取ってfortex.sedというファイルを作ります。 これも自分のディレクトリの下の ~/binにおきます。

また、sedスクリプト(2)も切り取ってhan2zen.sedというファイルを作り、 ~/binにおきます。

使うエディターをemacsに設定してあります。 好みに合わせて変更してください。

【使い方】

ktermなどでtと打ち込むとメニューがでます。 tと間をあけて数字やアルファベットなどを打つと対応したものが起動します。 メニューに{file}がついているものは適切なファイル名をつけて打ち込みます。

● t _ i _ textfile名

と打ち込めば、allttを使わずプレーンテキストファイルをTeXファイル に処理します。 80桁が入るようにマージンを調整したプリアンブルを先頭につけて、 タブを空白に展開して 半角空白(3個)を全角(1個)にして、 特殊記号をTeX化して、 改行に\\をつけます。

エディター(emacs)が起動しますから、プリアンブルを変更したり、 TeXコマンドを付け加えてください。 tempfor.texというファイルを出力します。

次は(t _8)です。

● t _ 8

と打ち込めば、platexでtempfor.texをコンパイルします。

次は(t _ 9)または (t _ b) です。

● t _ 9 (Vine.2.1.5の場合) または
t _ b (Red Hat 7.2, 7.3, 8.0 など)

と打ち込めば、プレビュアーが起動します。印刷もできます。


● t _ o _ textfile名

これは(t _ i)や(t _ g)や(t _ j)の前におこなう処理です。 いつも必要というわけではありません。

半角の数字とアルファベットと空白を全角に変換します。 行の幅を微調整する必要があるかもしれないのでエディター(emacs) が起動しますから修正してください。

半角と全角が混在してるテキストだとpLaTeXでは縦が少しズレてしまいます。 これはverbatimやallttを使用しても同じです。 tabular環境を使う方法(後述)もありますが手軽にすますなら 全角に変換したほうが簡単みたいです。

半角文字の割合が多い行があるのに、この前処理をしない場合には右マージン を越えたり、さらには行末が次に送られたりしてズレができてしまいます。 このような条件で全角化処理をしないなら、プリアンブルで文字サイズを 小さく設定するか、sidemarginやtextwidthを調整する必要があるかもしれません。 sidemarginなどはマイナスの値も指定できるようです。

※このメニューはsedを使いますが、LINUXディストリビューションによっては sedの日本語化が不充分なものがあります。うまくいかない場合は 日本語化の確かなディストリビューションのsedをコピーして使って下さい。 Vine-2.1.5のsedは使えることを確認してあります。Redhat-7.3やRedhat-8.0の sedではうまくいきません。

※Redhat-7.2やRedhat-7.3やRedhat-8.0のpLaTeXでは日本語を使用するには 設定ファイルを修正する必要があります。
参考:『UNIX USER』2003.1/SOFT BANK


(tabular環境の利用について)

表というほどではないのですが、値段表のような項目が2つのリストを 書くことはよくあります。ところが半角と全角が混ざっていると、縦が ずれてしまいます。全角化(t _ o)すれば、ほぼそろうのですが、記号な どは間のびしないように全角化してませんので、記号が含まれたり、 半角空白の割合が違う行があると少し、ずれてしまいます。 この場合は、TeX化したtempfor.texにtabular環境を書き加えます。

例えば

    (1)パン            100円\\
    (2)本             1200円\\
	
というTeX化されたリストならば、
	
    \begin{tabular}{lr}
        (1)パン  &         100円\\
	(2)本    &        1200円\\
    \end{tabular}
とすれば縦がそろいます。 alltt(つまりt _ j)でTeX化した場合はtempfor.texの中で \end{alltt}で中断してからtabular環境を書いて、 また\begin{alltt}を書き込みして再開するという手続きをとる ことになります。




この後のメニューはおまけです。

● t _ g _ textfile名

と打ち込むと、縦書きでプレーンテキストをtex化します。

● t _ j _ textfile名

と打ち込めば、マージンを調整したプリアンブルをつけて プレーンテキストをallttでtex化します。 エディター(emacs)が起動するのでプリアンブルを好みに変えて ください。必要に応じてTeXコマンドを付け加えてください。 tempfor.texというファイルを出力します。
あとはメニューiと同様に(t _ 8)(t _ 9)または(t _ b)です。
(allttを使う場合は\や{や}は文字として処理できないようです。)

● t _ l

iやjでTeX化したファイルをもとに戻します。完全ではありません。 プリアンブルや\\をとるだけです。 tempfor.txtを出力します。

● t _ m_ textfile名

全角の空白を3つの半角に変換します。

● t _ n_ textfile名

半角空白をスペースを出力する~に変換します。

● t _ k_ textfile名

タブを空白に展開します。

▲ほかのメニューはTeXと直接関係ないものです。


以下がシェルスクリプトです。

#!/bin/bash
###################################################################
# menu to use platex2e on plain text :by SATOU Shintarou,2001.1.17#
###################################################################
editor=emacs

if [ $# != 0 ]
then
   bangou=$1
   fname=$2
   case $bangou in
        3)
           tr -d '\r' < $fname | nkf -e > ${fname}.unix
	   echo ${fname}.unix
	   echo -e '\033[31mを出力しました。\033[00m'
	   exit
           ;;
        4)
           awk '{print $0 "\r"}' $fname | nkf -s > ${fname}.dos
	   echo ${fname}.dos
	   echo -e '\033[31mを出力しました。\033[00m'
	   exit
           ;;
        5)
           nkf -j $fname > ${fname}.jis
	   echo ${fname}.jis
	   echo -e '\033[31mを出力しました。\033[00m'
	   exit
           ;;
        8)
           platex tempfor.tex
	   echo  -e '\033[31mうまくできたら次は(t 9) or (t b)です。\033[00m'
	   exit
           ;;
        9)
           xdvi tempfor.dvi
           ;;
        0)
           $editor ~/bin/t 
           ;;
        b)
           pxdvi +nomakepk tempfor.dvi
           ;;
        g)
	   echo '%  このtexファイルを編集してください'>tempfor.tex
	   echo '%'>>tempfor.tex
           echo '\documentclass[12pt,a4paper]{tarticle}'>>tempfor.tex
           echo '\pagestyle{empty}'>>tempfor.tex
	   echo '\setlength{\topmargin}{0mm}'>>tempfor.tex
	   echo '\setlength{\topskip}{0mm}'>>tempfor.tex
	   echo '\setlength{\footskip}{20mm}'>>tempfor.tex
	   echo '\setlength{\oddsidemargin}{0mm}'>>tempfor.tex
	   echo '\setlength{\evensidemargin}{0mm}'>>tempfor.tex
	   echo '\setlength{\textwidth}{164mm}'>>tempfor.tex
           echo '\setlength{\ybaselineshift}{-0.5mm}'>>tempfor.tex
           echo '\begin{document}'>>tempfor.tex
           echo '\noindent'>>tempfor.tex
           cp $fname ${fname}.bak
	   expand  ${fname}.bak > $fname
      sed -f ./bin/fortex.sed $fname |awk '{print $0 "\\\\"}' >>tempfor.tex 
           echo '\end{document}'>>tempfor.tex
	   $editor  tempfor.tex
	   echo -e '\033[31mうまくできたら次は(t 8)です。\033[00m'
	   exit
           ;;
        h) 
echo '3 漢字と改行をunix式に変換     '
echo '4 漢字と改行をdos式 '
echo '5 漢字をjis式へ'
echo '8 texのコンパイル              '
echo '9 texのプレビューと印刷 '
echo '0 メニューのedit'
echo 'b  texのプレビューと印刷  '
echo 'g テキストをtexに変換(縦)    '
echo 'i テキストをtexに変換'
echo 'j テキストをそのままtexに変換  '
echo 'k タブを空白に変換  '
echo 'l texをテキストへ変換'
echo 'm 全角空白を3半角へ変換        '
echo 'M 3半角空白を全角へ変換        '
echo 'n 半角空白を~に変換            '
echo 'o 英数字を全角へ変換  '
           exit
           ;;
	i)
	   echo '%  このtexファイルを編集してください'>tempfor.tex
	   echo '%'>>tempfor.tex
           echo '\documentclass[12pt,a4paper]{jarticle}'>>tempfor.tex
           echo '\pagestyle{plain}'>>tempfor.tex
	   echo '\setlength{\topmargin}{-20.0mm}'>>tempfor.tex
	   echo '\setlength{\topskip}{0mm}'>>tempfor.tex
	   echo '\setlength{\footskip}{30mm}'>>tempfor.tex
	   echo '\setlength{\oddsidemargin}{0mm}'>>tempfor.tex
	   echo '\setlength{\evensidemargin}{0mm}'>>tempfor.tex
	   echo '\setlength{\textheight}{220mm}'>>tempfor.tex
	   echo '\setlength{\textwidth}{184mm}'>>tempfor.tex
           echo '\setlength{\ybaselineshift}{-0.0mm}'>>tempfor.tex
           echo '\begin{document}'>>tempfor.tex
           echo '\noindent'>>tempfor.tex
           cp $fname ${fname}.bak
	   expand  ${fname}.bak > $fname
      sed -f ./bin/fortex.sed $fname |awk '{print $0 "\\\\"}' >>tempfor.tex 
           echo '\end{document}'>>tempfor.tex
	   $editor  tempfor.tex
	   echo -e '\033[31mうまくできたら次は(t 8)です。\033[00m'
	   exit
	   ;;
        j)
          echo '%  このtexファイルのパラメーターを編集してください'>tempfor.tex
	   echo '%'>>tempfor.tex
           echo '\documentclass[12pt,a4paper]{jarticle}'>>tempfor.tex
	   echo '\pagestyle{bothstyle}'>>tempfor.tex
           echo '\setlength{\topmargin}{0mm}'>>tempfor.tex
           echo '\setlength{\topskip}{0mm}'>>tempfor.tex
	   echo '\setlength{\footskip}{20mm}'>>tempfor.tex
	   echo '\setlength{\oddsidemargin}{0mm}'>>tempfor.tex
	   echo '\setlength{\evensidemargin}{0mm}'>>tempfor.tex
	   echo '\setlength{\textwidth}{184mm}'>>tempfor.tex
           echo '\usepackage{alltt}'>>tempfor.tex
           echo '\begin{document}'>>tempfor.tex
	   echo '\begin{alltt}'>>tempfor.tex
	   cat $fname >>tempfor.tex
	   echo '\end{alltt}'>>tempfor.tex
	   echo '\end{document}'>>tempfor.tex
	   $editor  tempfor.tex
	   echo -e '\033[31mうまくできたら次は(t 8)\033[00m'
	   exit
	   ;;
	k)
           expand  $fname > ${fname}.tb2spc
	   echo ${fname}.tb2spc
	   echo -e '\033[31mを出力しました。\033[00m'
	   exit
	   ;;
	l)
	   awk ' /\\\\/ {gsub("\\\\", "");print}'   tempfor.tex > tempfor.txt
	   $editor  tempfor.txt
	   ;;
	m)
           sed -e 's/ /   /g' $fname >${fname}.zn2hn-s
	   echo ${fname}.zn2hn-s
	   echo -e '\033[31mを出力しました。\033[00m'
	   exit
	   ;;
	M)
           sed -e 's/   / /g' $fname >${fname}.hn2zn-s
	   echo ${fname}.hn2zn-s
	   echo -e '\033[31mを出力しました。\033[00m'
	   exit
	   ;;
	n)
	   tr ' ' '~' < $fname >${fname}.spc2tld
	   echo ${fname}.spc2tld
	   echo -e '\033[31mを出力しました。\033[00m'
	   exit
	   ;;
        o) 
           sed -f ./bin/han2zen.sed $fname > ${fname}.hn2zn
	   $editor  ${fname}.hn2zn
	   echo ${fname}.hn2zn
	   echo -e '\033[31mを出力しました。\033[00m'
           exit
           ;;
     esac
fi
echo -e '\033[07m'
echo '  t  [symbol] [file] enter '
echo
echo 'symbol:' 
echo '3 {file} dos_to_unix '
echo '4 {file} unix_to_dos '
echo '5 {file} jis '
echo '8 platex '
echo '9 xdvi (old) '
echo '0 edit this menu '
echo 'b pxdvi +nomakepk(73) '
echo 'g {file} plain2tex(tate) '
echo 'h japanese help '
echo 'i {file}  plain_to_tex '
echo 'j {file} to_tex(alltt) '
echo 'k {file} expand '
echo 'l tex_to_plain '
echo 'm {file} space(zen to 3han) '
echo 'M {file} space(3han to zen) '
echo 'n {file}space(han to ~) '
echo 'o {file} han_to_zen '
echo -e '\033[00m'     



以下がsedスクリプト(1)です。
#TEXで特殊文字として作用する文字などをそのまま印刷するための変換 # s/ / /g s/\\/\\textbackslash /g s/\%/\\%/g s/\$/\\$/g s/\#/\\#/g s/\&/\\&/g s/\{/\\{/g s/\}/\\}/g s/\^/\\textasciicircum /g s/\_/\\_/g s/\~/\\textasciitilde /g s/|/\\textbar /g s//\\textgreater /g
以下がsedスクリプト(2)です
#半角から全角へ s/ / /g y/0123456789/0123456789/ y/ABCDEFGHIJKLM/ABCDEFGHIJKLM/ y/NOPQRSTUVWXYZ/NOPQRSTUVWXYZ/ y/abcdefghijklm/abcdefghijklm/ y/nopqrstuvwxyz/nopqrstuvwxyz/


参考:
日本語LATEX2eブック(中野賢著)アスキー出版
はじめてのLinux(ノマド・ワークス著)新星出版社



著:佐藤信太郎
メールアドレスは目次にあります。


●目次へ●