Winshellのページについて

Winshellのページについて

- 中田 学 の投稿
返信数: 7
関係各位殿

お世話になります。中田と申します。

TexWikiからwinshellのページが消えていたのですが、
意図的に削除されたのでしょうか。

以前からwinshellを使用させており、設定を今一度見直したいと考えております。

ご存じの方いらっしゃいましたらご教示ください。
中田 学 への返信

Re: Winshellのページについて

- 匿 名 の投稿

WinShell のページは意図的に削除しました.
不要なデータが残っていると必要な情報にアクセスしにくくなるので
必要のないデータは削除するようにしています.
TeX Live, W32TeX, MiKTeX には統合環境として TeXworks が収録されています.
WinShell の代わりに TeXworks を使用することができます.
TeXworks はオープンソースなのでバグがあれば自分で修正することもできます.

匿 名 への返信

Re: Winshellのページについて

- 若 雲 の投稿
不要かどうかは人によるんじゃないでしょうか……。
私も、(日本語化とかしてますが)TeXworksは「不要」ですし。

ページは残して、冒頭に「現在では主流ではありません。使っている人も少ないので、サポートも得にくいです。それでも使いたければ以下の情報を見てください」という形をとるのがよいのではないでしょうか。

もし、初心者が混乱しないように古い・難しい情報は削りたいというのであれば、そのように整理した初心者用のページを作成して誘導するのが、情報量とわかりやすさのバランスをとる意味で適しているのではないかと思います。
若 雲 への返信

Re: Winshellのページについて

- 匿 名 の投稿

若 雲さん返信ありがとうございます.
不要かどうかは人によるというのはそのとおりだと思います.
私も TeX のエディタとして使うのであれば Emacs と Vim 以外は不要です.

WinShell のページを削除したのは単に私が Wiki の記事の内容をメンテナンスするのが面倒になったからです.
他に WinShell を必要としていて Wiki に記述したいという方がおられるのであればそうすればいいと思います.

質問者の方は「以前からwinshellを使用させており」と書かれているので 初心者ではないと思います.
初心者であれば WinShell のページがなくなっていてもとくに混乱はしないと思います.

初心者用のページを作成するのはいいと思いますが TeX はそもそも初心者向けに設計されていない言語だと思います.
私が初心者だったら
「この言語は古臭いし使いたくない.Python や Lua のような今時の言語を使おう.」
って思って TeX を使うのをやめてしまうと思います.
初心者には TeX よりも Python や Lua をすすめたほうがいいと思います.

匿 名 への返信

Re: Winshellのページについて

- 匿 名 の投稿
別の匿名です。
横から失礼します。

その上本題とあまり関係ないことで恐縮ですが、
> TeX よりも Python や Lua をすすめ(る)
とおっしゃることについてです。

Pythonというものをよく知らなかったのでWebで調べてみたところ、
プログラミング言語の一種ということはわかりました。
そして豊富なライブラリを持つということも。

私はTeXを使って印刷物を作っているのですが、
TeXの行分割アルゴリズムやハイフネーション、アラインメントなどの機能が
印刷物の作成になくてはならないものだと思っています。
一般的なプログラミング言語でこのようなことができるとは思えなかったのですが、
Pythonをつかうと適切な活字配置を指示した印刷のためのデータ作成ができるのでしょうか。
それはたとえば、豊富なライブラリの中に印刷物データ作成のための機能を実装したものがあるということなのか、
あるいは、Pythonの記述しやすさを持ってすれば行分割アルゴリズムその他を実装してPDFファイルを書き出すことができるということなのか、
どういうことなのでしょうか。

たとえぼ、TeXで
\shipout\vbox{\hsize 5in これはサンプルテキストです。\par}
のようにしてできたDVIファイルを、DVIOUTから印刷するようなことを
Pythonではどのようにするのでしょうか。
匿 名 への返信

Re: Winshellのページについて

- 匿 名 の投稿

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 でプログラミングしないのかを理解してもらったほうがいいと思います.

匿 名 への返信

Re: Winshellのページについて

- 匿 名 の投稿
2013年 05月 10日(金曜日) 18:24の匿名です。

コードまでつけたお返事をいただき、ありがとうございました。

Pythonについては詳しくないので想像ですが、
上のPythonコードは、TeXのコードをファイルに書き出して、
そのファイルをTeXに与えて組版させているのではないかと思います。

これができたとしても、TeXの代わりにPythonなど他の言語を薦める理由には
ならないような気がします。
Pythonに限らない一般の言語でTeXの機能を実装できるということにしても、
そもそもTeXはPascalで実装されたわけですし、まあ当然に思えます。

私の場合はTeXをプログラミング言語としても使っていますが、
TeXはプログラミング言語として人に薦めたりするようなものではないですよね。
印刷のためのプログラムとしてなら薦めますが。
匿 名 への返信

Re: Winshellのページについて

- 匿 名 の投稿

ご意見ありがとうございます.

ご指摘の通り私が書いた 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 で文書作成されればいいと思います.