lpr-buffer(ハードコピーの印刷を参照)やps-print-buffer(PostScriptハードコピーを参照)といった印刷コマンドは、POSIX形式のlprプログラムが利用できない場合、出力をプリンターポートのいずれかに送信することでMS-DOSおよびMS-Windowsで動作します。すべてのシステムにおいて同一のEmacs変数が印刷を制御しますが、場合によってはMS-DOSとMS-Windowsでデフォルト値が異なることがあります。
MS Windows上のEmacsは、デフォルトのプリンターを自動的に判別しようとします(関数 default-printer-name
を使用)。しかし、まれにこの処理が失敗したり、Emacs内から別のプリンターを使用したい場合があったりします。本節の続きでは、どのプリンターを使用するかをEmacsに指定する方法について説明します。
ローカルプリンターを使用したい場合は、Lisp変数 lpr-command を ""(Windowsでのデフォルト値)に、printer-name をプリンターポート名(例えば、通常のローカルプリンターポートである "PRN"、またはシリアルプリンター用の "LPT2" や "COM1")に設定してください。また、printer-name
にファイル名を指定することもでき、その場合、「印刷」された出力は実際にはそのファイルに追記されます。printer-name を "NUL"
に設定すると、印刷出力はサイレントに破棄されます(システムのヌルデバイスに送られます)。
また、printer-name にそのプリンターの UNC 共有名(例:"//joes_pc/hp4si")を指定することで、別のマシンで共有されているプリンターを利用することもできます。(ここではフォワードスラッシュとバックスラッシュのどちらを使用しても構いません。)共有プリンターの名前を確認するには、コマンドプロンプトからコマンド「net view」を実行してサーバーの一覧を取得し、「net view
server-name」を実行してそのサーバーで共有されているプリンター(およびディレクトリ)の名前を確認してください。あるいは、デスクトップ上の「Network
Neighborhood」アイコンをクリックし、ネットワーク経由でプリンターを共有しているマシンを探してください。
プリンターが「net view」の出力に表示されない場合や、printer-nameにUNC共有名を設定してもそのプリンターでハードコピーが出力されない場合は、「net use」コマンドを使用して、"LPT2"などのローカルプリントポートをネットワークプリンターに接続できます。例えば、net use LPT2: \\joes_pc\hp4si44と入力すると、WindowsがLPT2ポートをキャプチャし、印刷データをマシンjoes_pcに接続されたプリンターに転送します。このコマンドの後、printer-nameに"LPT2"を設定すれば、ネットワークプリンターでハードコピーが出力されるはずです。
一部のWindowsネットワークソフトウェアでは、Windowsに"LPT2"などの特定のプリンターポートをキャプチャさせ、‘net use’ではなくControl Panel->Printersアプレット経由でネットワークプリンターにリダイレクトさせるよう設定できます。
printer-name
にファイル名を指定する場合は、絶対ファイル名を使用するのが最適です。Emacs
は現在のバッファのデフォルトディレクトリに基づいて作業ディレクトリを変更するため、printer-name
のファイル名が相対パスである場合、印刷を行ったバッファのディレクトリ内に、そうしたファイルが複数作成されることになります。
printer-name
の値が正しいにもかかわらず、印刷してもプリンターでハードコピーが出力されない場合は、お使いのプリンターがプレーンテキストの印刷に対応していない可能性があります(一部の安価なプリンターではこの機能が省かれています)。その場合は、以下に説明する
PostScript 印刷コマンドをお試しください。
コマンド print-buffer および print-region は、pr
プログラムを呼び出すか、あるいは lpr
プログラムに特殊なスイッチを指定して、印刷される各ページにヘッダーを出力します。MS-DOS や MS-Windows
には通常これらのプログラムが用意されていないため、デフォルトでは変数 lpr-headers-switches
が設定されており、ページヘッダーの印刷要求は暗黙的に無視されます。したがって、print-buffer と print-region
は、それぞれ lpr-buffer および lpr-region と同じ出力を生成します。適切な pr
プログラム(例えば GNU Coreutils のもの)がある場合は、lpr-headers-switches を nil
に設定してください。すると、Emacs は pr を呼び出してページヘッダーを生成し、その結果を
printer-name で指定された通りに印刷します。
最後に、lpr の代替手段がある場合は、変数 lpr-command に "lpr"
を設定できます。すると、他のシステムと同様に、Emacs は印刷時に lpr
を使用します。(プログラム名が lpr でない場合は、lpr-command に適切な値を設定してください。)lpr-command が ""
でない場合、変数 lpr-switches は標準的な意味を持ちます。変数 printer-name が文字列値を持つ場合は、Unix と同様に、lpr の -P オプションの値として使用されます。
一連の並列変数 ps-lpr-command、ps-lpr-switches、および ps-printer-name(PostScriptハードコピー用変数を参照)は、PostScriptファイルをどのように印刷するかを定義します。これらの変数は、前述の非PostScript印刷用の対応する変数と同様に使用されます。したがって、printer-name が非PostScript印刷に使用されるのと同様に、ps-printer-name の値は PostScript
出力の送信先となるデバイス(またはファイル)の名前として使用されます。(2つの異なるポートに2台のプリンタが接続されており、そのうち1台のみが
PostScript プリンタである場合に備え、2組の独立した変数セットが用意されています。)
変数 ps-lpr-command のデフォルト値は "" であり、これにより PostScript 出力が ps-printer-name で指定されたプリンタポートに送信されます。ただし、ps-lpr-command に PostScript
ファイルを受け付けるプログラム名を指定することも可能です。したがって、PostScript 非対応のプリンタを使用している場合は、この変数に
PostScript インタプリタプログラム(Ghostscript
など)の名前を設定できます。インタプリタプログラムに渡す必要があるスイッチは、ps-lpr-switches を使用して指定します。(ps-printer-name の値が文字列の場合、その文字列は -P オプションの値としてスイッチリストに追加されます。これはおそらく lpr を使用している場合にのみ有用であるため、通常インタプリタを使用する際は、ps-printer-name に文字列以外の値を設定して無視させるようにします。)
例えば、システムの既定のプリンターで印刷するためにGhostscriptを使用する場合は、.emacsファイルに以下のように記述してください:
(setq ps-printer-name t)
(setq ps-lpr-command "D:/gs6.01/bin/gswin32c.exe")
(setq ps-lpr-switches '("-q" "-dNOPAUSE" "-dBATCH"
"-sDEVICE=mswinpr2"
"-sPAPERSIZE=a4"))
(Ghostscript が D:/gs6.01 ディレクトリにインストールされていることを前提としています。)
なお、‘net
use’コマンドではUNC共有名をWindows形式のバックスラッシュで入力する必要がありますが、printer-nameの値についてはフォワードスラッシュとバックスラッシュのどちらでも指定可能です。