書類などをTeXで頑張る方法

いんとろ

提出せねばならない書類がWordフォーマットしか用意されてない,ということはそこまで珍しいことではありません.しかし,Wordなんて持ってないとか,Wordは思い通りに書けないとか言う人も多いはずです.また,数式が書きたいけどWordの数式はなぁ……なんて人もいるはず.

そんな時,TeXでこれらの書類を書くことができたら嬉しいことです.そんな方法をここに記してみます.勿論,財布に優しくフリーソフトのみで攻めてみます*1

*1
以下でわかる通り,与えられたファイルがWordファイルでなくても,そのファイルを「印刷」することができれば,使用可能です.

戦略

アイデアは単純です.書式のファイルを背景として取り込み,そこにあわせて文字出力.ただこれだけです.というわけで,以下その方法を実現してみましょう.

なお,このアイデアは斎藤君によります.多謝!なお,彼自身による書式が指定された書類を TeX で書く方法もどうぞ(アイデアは同様ですが,少し実装方法が違います.).

前提

Windows*2,角藤さんによるW32TeX,dviout,GhostScript,GSView,Adobe Readerといった標準的な構成を想定します.W32TeXはgraphicxパッケージが使えることを確認しておきます.たぶん普通は使えるはずです.

*2
「フリーソフトしか使わない」と断言した直後でなんですが……何せ僕は普段これを使ってるもので.まぁ,Windowsじゃなくても多分大丈夫かと.きっと.

実践

それでは,始めてみましょう.

ファイルをPSに変換

与えられたファイルを使いやすいPSファイルに変換します.

まずPostScriptプリンタドライバをインストールします.これは,ファイルに「印刷」することにより,psファイルを作り出せるものです*3PSプリンタドライバのインストールと活用方法も参考にしてください.

AdobeからPPDファイルをダウンロード&解凍します.解凍したら,Adist5j.ppdというファイル以外は消してください.それと,やはりAdobeからユニバーサルインストーラを落とします.ダウンロードし終わったら,ダブルクリックでインストール開始.以下のようにしてください(バージョンにより少し変更がある可能性があります.).

  1. 「プリンタの接続方法」は「コンピュータに直接接続(ローカルプリンタ)」
  2. 「ローカルポートの設定」は「FILE: ローカル ポート」
  3. 「プリンタモデルの選択」は「参照」をクリックし,PPDファイルを落としたディレクトリを選択.左の「プリンタ」に「Acrobat Distiller J」が現れるので,それを選択.
  4. 「共有」はお好きなように.必要がなければ共有しなくていいと思います.
  5. 「プリンタ情報」は,プリンタ名が「Acrobat Distiller J」,通常使うプリンタには設定せず,印字テストは行うことにします.
  6. 「プリンタの設定」は後からでもできるので,「いいえ」.
  7. 「ファイルへの出力」ダイアログがでたら,適当なファイル名を指定してください.そこにテスト印刷されたファイルが作られます.
  8. 最後に,作られたファイルを開き,うまくできてることをチェックしてください.

インストールが終わったら,与えられたフォーマットファイルをPSに変換します.与えられたWordなりPDFなりをそのビューア*4で開き,印刷をします.プリンタを「Acrobat Distiller J」にし,「ファイルに出力」がチェックされてることを確認します.このまま印刷をすればPSファイルとして出力されますが,ここで1ページ1ファイルにしておく必要があります.というわけで,1ページ目を1.ps,2ページ目を2.psといったようにしてPSファイルを作っていってください.

*3
従って,PDFやWordファイルに限らず,印刷さえできればどんなファイルでも使うことができます.
*4
Wordを持ってないけどWordファイルな人は,Word Viewerが便利

TeXの出番

いよいよTeXの出番です.psファイルと同じディレクトリにTeXファイルを作成しましょう.とりあえず,普通の雛形を作っておきます.

\DeclareFontShape{JY1}{mc}{m}{n}{<-> jis}{}
\DeclareFontShape{JY1}{gt}{m}{n}{<-> jisg}{}
\documentclass{jarticle}
\begin{document}

\end{document}

ここで,jsarticleは使わないほうが無難です*5.また,文字サイズを変更したい場合は,\documentclass[11pt]{jarticle}といったようにすればOKです.デフォルトは10ptです.なお,TeXの1ptとWordの1ptはちょっと違っていて,TeXの10ptは大体Wordの9.5ptに対応します.

*5
jsarticleは文字サイズの変更を全体を拡大縮小することで行っているためです.文字サイズを10pt以外にすると背景画像も一緒に伸び縮みしちゃいます.

背景を取り込む.

graphicxをusepackageしておいてください.オプションにはdvipdfmでも入れておきましょう.

背景に画像を取り込むのは,TeX Q & Aで紹介されていたマクロを使います.次をプリアンブルに記述します.

\hoffset0mm
\voffset0mm

\makeatletter
\let\@@shipout\shipout
\def\shipout\vbox{\@@shipout\vbox\bgroup\afterassignment\insertBackGround\let\reserved@a=}
\def\insertBackGround#1{#1%
        \iftombow
                \copy\BackGround\kern0pt
        \else
                \kern-1truein\moveleft1truein\copy\BackGround\kern1truein
        \fi}
\newbox\BackGroundUnit
\newbox\BackGround
\def\@haikei#1{
\setbox\BackGroundUnit\hbox{\includegraphics*{#1}}
\@tempdima\paperheight
\advance\@tempdima\ht\BackGroundUnit\advance\@tempdima\dp\BackGroundUnit
\setbox\BackGround\vbox to \@tempdima{
        \@tempdima=\paperwidth\advance\@tempdima\wd\BackGroundUnit
        \leaders\hbox to\@tempdima{\leaders\copy\BackGroundUnit\hfil}\vfil
}
\wd\BackGround=0pt\ht\BackGround=0pt\dp\BackGround=0pt
}
\newcommand{\HAIKEI}{\@haikei{\thepage.ps}}
\makeatother

\HAIKEIが画像を張り込むのに使う命令です.適切なタイミングで\HAIKEIと書いておくことで,そのページ以降に(ページ数).psという画像を背景として取り込みます.

但し,これだと背景画像が少しずれることがあるようです.その時は,\hoffset,\voffsetを適当にいじってください.

調整

背景に取り込めれば,後は文字を調整するのみです.本格的な位置調整が必要な場合は,picture環境でねらい打ちなどが必要かもしれませんが,とりあえず今回は「枠のみが指定されていてそれにあわせる」という簡単な状況を想定します.

このような簡単な状況下では,文字を出力する位置,幅,高さを指定すれば十分なはずです.まずは,よけいな値を全て0にしておきます.

\headsep0pt
\headheight0pt
\topskip0pt
\footheight0pt
\footskip0pt
\evensidemargin\oddsidemargin

但し,\headsep,\headheight,\footheight,\footskipはヘッダ,フッタを使わない場合のみです. そして,以下をページ毎に調整すればいいでしょう*6

どれがどこを表すのかわからない人は,dviout 3.16.1以降を起動し,Help→Help TeXを選んで現れたdvioutから,Sizeをクリックして表示されるのを参考にしてください.

*6
因みにこれらの値は「一度決めたら変更するのは推奨されない」となっています.気になる方は\enlargethispage, \hspace*, \vspace*などを用いた方がいいかもしれません.

調整に関する補足

調整すればよい,といいましたが,そもそもこれらの値は一度決めたら変更してはならないものらしく,結構思い通りになりません.自分がした時に感じた注意点をいくつか.

値を設定するタイミング

\textheightはページが変わる前に変更しておかないとだめみたいですが,\oddsidemarginや\topmarginはページが変わった後に変更しておくべきみたいです.

\textwidth

\textwidthはプリアンブル以外で設定できません.横幅を変えたい場合は,minipage環境で囲みましょう.\begin{minipage}{160mm}とかすると,160mmの横幅になります.但し,これだと段落頭のインデントが入らないので,\parindent1zwしておきます.

間をあける

少し行をとばしたい時は,\vspace{10mm}とかを使います.改ページは\newpageです.

フッタを使ってみる

例えば各ページ一番下に名前を入れる必要がある,という場合は,フッタなどを使うと便利です.例えば……

\makeatletter
\newdimen\footleft
\def\ps@mystyle{%
\renewcommand{\@oddhead}{}%
\renewcommand{\@evenhead}{\@oddpage}%
\renewcommand{\@oddfoot}{\hbox to \footleft{\hfill 阿部 紀行}}%
\renewcommand{\@evenfoot}{\@oddfoot}
}
\makeatother
\pagestyle{mystyle}

として,\footskip,\footleft(上で勝手に定義したもの)を設定したりとか,です.

出力

普通にコンパイルすれば,dvioutで見られるはずです.また,更にdvipdfmすれば,pdfファイルができます.dviだと,背景画像が取り込まれませんが*7,pdfなら背景画像も取り込まれるので,それだけ持ってれば十分です.

*7
どうやら取り込ませることは可能らしいですが.詳細はdvioutのヘルプ参照.ただ,pdfで十分だとは思います.
戻る