namazu-dev(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

supporting tex document with detex



fj.comp.texhax でこんな記事を見つけました。

Message-ID: <84ev0c$a7n$1@xxxxxxxxxxxxxxxxx>
| TeX・LaTeX のソースから,コマンドを削除してプレインテキストにするツー
| ルには detex や untex などがあります。

さっそく両者を取ってきて試しました。

  * DeTeX Home Page
    <http://www.cs.purdue.edu/homes/trinkle/detex/>
  * untex
    <ftp://ring.asahi-net.or.jp/pub/text/CTAN/support/untex/>   

どちらも機能に大差はないようですが、

  * 前者は lex を使って真面目に字句解析をしている
  * 前者は現在でも保守が続いているようだ
  * 後者はたった 478行と、胡散臭い
  * 後者は 1994年で保守が止まっているようだ

という理由で DeTex の方が好ましいようです。さっそく、DeTex 
を用いた Namazu 用のフィルタを用意しました。

が、File::MMagic で *.tex ファイルをapplication/x-tex として
認識させることができません。mknmz のsetup_magic()に

    $Magic->addSpecials("application/x-tex",
	"^\\document(style|class)");
    $Magic->addFileExts('\\.tex$', 'application/x-tex');

を追加するだけでは駄目なのでしょうか? > 野首さん

とりあえず mknmz -t application/tex のように文書形式を指定す
れば動きます。

-- Satoru Takabayashi

おまけ: Perl Cookbook に載っていた正規表現の面白い応用

  1. 正規表現で素因数分解をしよう!

    # Perl Cookbook のコードをわずかに修正した
    while (<>) {
	chomp;
	for ($N = ('o' x $_); $N =~ /^(oo+?)\1+$/; $N =~ s/$1/o/g) {
	    print length($1), " $N // ", length($N), "\n";
	}
	print length($N),  " $N // ", length($N), "\n";
	print "\n";
    }

    実行例:

      % perl prime-pattern.pl
      30
      2 oooooooooooooooooooooooooooooo // 30
      3 ooooooooooooooo // 15
      5 ooooo // 5

      54
      2 oooooooooooooooooooooooooooooooooooooooooooooooooooooo // 54
      3 ooooooooooooooooooooooooooo // 27
      3 ooooooooo // 9
      3 ooo // 3


  2. 正規表現で不定方程式を解こう!

    # solve for 12x + 15y + 16z = 281, maximizing x
    if (($X, $Y, $Z)  =
       (('o' x 281)  =~ /^(o*)\1{11}(o*)\2{14}(o*)\3{15}$/))
    {
	($x, $y, $z) = (length($X), length($Y), length($Z));
	print "One solution is: x=$x; y=$y; z=$z.\n";
    } else {
	print "No solution.\n";
    }

   実行結果:

     % perl diophantine-equations.pl
     One solution is: x=17; y=3; z=2.

# 正規表現メイリングリストがあるといいな (どなたか作りません?)