若 雲さん返信ありがとうございます.
不要かどうかは人によるというのはそのとおりだと思います.
私も TeX のエディタとして使うのであれば Emacs と Vim 以外は不要です.
WinShell のページを削除したのは単に私が Wiki の記事の内容をメンテナンスするのが面倒になったからです.
他に WinShell を必要としていて Wiki に記述したいという方がおられるのであればそうすればいいと思います.
質問者の方は「以前からwinshellを使用させており」と書かれているので 初心者ではないと思います.
初心者であれば WinShell のページがなくなっていてもとくに混乱はしないと思います.
初心者用のページを作成するのはいいと思いますが TeX はそもそも初心者向けに設計されていない言語だと思います.
私が初心者だったら
「この言語は古臭いし使いたくない.Python や Lua のような今時の言語を使おう.」
って思って TeX を使うのをやめてしまうと思います.
初心者には TeX よりも Python や Lua をすすめたほうがいいと思います.
横から失礼します。
その上本題とあまり関係ないことで恐縮ですが、
> TeX よりも Python や Lua をすすめ(る)
とおっしゃることについてです。
Pythonというものをよく知らなかったのでWebで調べてみたところ、
プログラミング言語の一種ということはわかりました。
そして豊富なライブラリを持つということも。
私はTeXを使って印刷物を作っているのですが、
TeXの行分割アルゴリズムやハイフネーション、アラインメントなどの機能が
印刷物の作成になくてはならないものだと思っています。
一般的なプログラミング言語でこのようなことができるとは思えなかったのですが、
Pythonをつかうと適切な活字配置を指示した印刷のためのデータ作成ができるのでしょうか。
それはたとえば、豊富なライブラリの中に印刷物データ作成のための機能を実装したものがあるということなのか、
あるいは、Pythonの記述しやすさを持ってすれば行分割アルゴリズムその他を実装してPDFファイルを書き出すことができるということなのか、
どういうことなのでしょうか。
たとえぼ、TeXで
\shipout\vbox{\hsize 5in これはサンプルテキストです。\par}
のようにしてできたDVIファイルを、DVIOUTから印刷するようなことを
Pythonではどのようにするのでしょうか。
Python 2.7.4 をインストールします.
以下の Python スクリプトを sample.py という名前で UTF-8 で保存します.
あらかじめ dviout を起動しておいてコマンド プロンプトから
sample.py
とタイプして実行すると ptex で処理されて出力された sample.dvi を dviout で表示して
Print ダイアログを表示します.
#!/usr/bin/env python
#coding: utf-8
from ctypes import *
import subprocess
import re
import os.path
import time
def executeDdeCommand(service, topic, command):
DdeInitialize = windll.user32.DdeInitializeA
DdeUninitialize = windll.user32.DdeUninitialize
DdeConnect = windll.user32.DdeConnect
DdeDisconnect = windll.user32.DdeDisconnect
DdeClientTransaction = windll.user32.DdeClientTransaction
DdeCreateStringHandle = windll.user32.DdeCreateStringHandleA
DdeFreeStringHandle = windll.user32.DdeFreeStringHandle
DdeFreeDataHandle = windll.user32.DdeFreeDataHandle
DDECALLBACK = WINFUNCTYPE(c_void_p, c_uint, c_uint, c_void_p, c_void_p, c_void_p, c_void_p, c_ulong, c_ulong)
def py_mycallback(uType, uFmt, hconv, hsz1, hsz2, hdata, dwData1, dwData2):
return 0
mycallback = DDECALLBACK(py_mycallback)
idInst = c_uint(0)
hConv = 0
service = c_wchar_p(service)
topic = c_wchar_p(topic)
pData = c_char_p(command)
cbData = len(command)+1
ret = DdeInitialize(byref(idInst), pointer(mycallback), 0, 0)
hszService = DdeCreateStringHandle(idInst, service, 1200)
hszTopic = DdeCreateStringHandle(idInst, topic, 1200)
hConv = DdeConnect(idInst, hszService, hszTopic, 0)
if hConv:
XTYP_EXECUTE = int("4050",16)
hDdeData = DdeClientTransaction(pData, cbData, hConv, 0, 0, XTYP_EXECUTE, 10000, 0)
print "DDE Execute returned: ", hex(windll.user32.DdeGetLastError(idInst))
DdeFreeDataHandle(hDdeData)
else:
print("Could not connect!")
DdeFreeStringHandle(idInst, hszTopic)
DdeFreeStringHandle(idInst, hszService)
DdeDisconnect(hConv)
DdeUninitialize(idInst)
ptex = 'ptex'
sample = 'sample.tex'
f = open('sample.tex', 'w')
f.write(ur'\shipout\vbox{\hsize 5in これはサンプルテキストです。\par}'.encode('cp932'))
f.write(r'\bye')
f.close()
subprocess.call([ptex, sample])
time.sleep(1)
fname = os.path.abspath(os.path.basename(re.sub(r'\.[^.]*$', '.dvi', sample)))
command = '[FileOpen("' + fname + '")][FilePrint]'
executeDdeCommand("dviout", "dviout", command)
私が TeX よりも Python, Lua を初心者にすすめる理由は
単純に TeX がプログラミング言語の学習に向いていないのと
プログラミング言語として見た場合に使い勝手が悪く不便だからです.
Python, Lua, C++ などの別の言語で記述して TeX に変換している人を見かけますが
このような方法を使わないと記述できないような言語は
自分にとっては必要なプログラミング言語とはなりえないです.
もちろん TeX は組版のための言語なので
別にプログラミング言語として使えなくても全くかまわないと思います.
ただほとんどの人にとっては組版言語よりも
普通に日常で使えるプログラミング言語を
先に学んだほうが便利でいいと思っています.
単に美しく出力するためだけの言語がそんなに重要だとは思えません.
TeX を学習するのは組版に本当に興味のある人だけで十分だと思います.
Pythonをつかうと適切な活字配置を指示した印刷のためのデータ作成ができるかどうかですが
実現可能かどうかで言えば可能だと思います.
Python に限らず Python 以外の一般的なプログラミング言語でも
そういった機能を実装すれば可能だと思います.
ただ能力や時間的な制約もあるので TeX を使った方が
手っ取り早く実現できると思います.
その場合でも Python を使えばテキストを処理したり別のプログラムに処理させたりするような
スクリプトを記述することで作業が効率よく行えると思います.
Python は記述しやすく可読性が高いプログラミング言語です.
ライブラリも豊富にあるので欲しい機能をライブラリから探して使うことができます.
Lua は組み込みに特化したプログラミング言語です.
組み込み向けなので必要最小限の機能しかありません.
Python に比べるとライブラリも少ないです.
ただ TeX ディストリビューションには texlua があるので
Lua で記述したプログラムは texlua で実行することができます.
TeX がインストールされている環境であれば
Lua が使えることが期待出来ますし
Python よりも高速に動作します.
なので現在 TeX を使っている人は TeX 以外のプログラミング言語も同時に学習して
どうして誰も TeX でプログラミングしないのかを理解してもらったほうがいいと思います.
コードまでつけたお返事をいただき、ありがとうございました。
Pythonについては詳しくないので想像ですが、
上のPythonコードは、TeXのコードをファイルに書き出して、
そのファイルをTeXに与えて組版させているのではないかと思います。
これができたとしても、TeXの代わりにPythonなど他の言語を薦める理由には
ならないような気がします。
Pythonに限らない一般の言語でTeXの機能を実装できるということにしても、
そもそもTeXはPascalで実装されたわけですし、まあ当然に思えます。
私の場合はTeXをプログラミング言語としても使っていますが、
TeXはプログラミング言語として人に薦めたりするようなものではないですよね。
印刷のためのプログラムとしてなら薦めますが。
ご意見ありがとうございます.
ご指摘の通り私が書いた Python コードは
TeX のコードをファイルに出力して
TeX で処理させています.
Python に詳しくない人でも
Python のコードを見てもらえば
なんとなく処理が分かってもらえるというところが
Python のいいところだと思います.
TeX の代わりに Python を薦めるのは
あくまでプログラミング言語の場合であって
組版言語としてではありません.
一時期 TeX をプログラミング言語として使うといった
ネタが流行っていた(?)ので
それに対する感想です.
私は文書は美しく出力するよりも
早く出力することの方が重要だと考えています.
早く出力できればそれだけ時間が節約できて
別のことに時間を使えるからです.
そのためには早く文書を作成する必要がありますが
TeX では時間がかかってしまうと思います.
早く文書を作成したい場合は Markdown や Org mode で記述して
必要であれば TeX に出力して処理させるといった方法を選択します.
つまり TeX はバックエンドとして使えばいいというのが私の考えです.
もう一つ重要だと考えているのがコードの可読性についてです.
自分が書いたコードであれば自分の頭の中にイメージがあるので
コードを読まなくても理解できますが
他人の書いたコードは頭の中にイメージがないので
見てもすぐには理解出来ません.
他人の書いたコードを理解するには
コードを読む必要があります.
TeX は他人が読む場合に可読性が高いとは思えません.
この点に関しても TeX をフロントエンドとして使うことを薦めない理由です.
私は TeX にこだわりがあるわけではなく
簡単で手軽に文書が作れれば TeX 以外の方法でもいいかなと思っている
普通のユーザーなので
2013年 05月 10日(金曜日) 18:24 の匿名さんのような
TeX をプログラミング言語として使っておられるような方であれば
TeX で文書作成されればいいと思います.