プログラミング
あるいは 〜私の TeX プログラム変換環境〜 前回までの説明で、ようやく「えるたそ」の Lua プログラム(元は (2)の eltaso.lua、Lua 内変換後は (9)の eltaso4.lua)を TeX のプログラムに変換する準備が整った。ここからは部分に分けて、元の Lua のコード…
あるいは 〜私の TeX プログラム変換環境〜 【しぶとく宣伝】 TeX & LaTeX Advent Calendar あなたにしか知らない LaTeX がある きっと TeX 芸もある。 (詳細は ATND のページで) 私の TeX コーディングスタイル ここまで、コーディングの様式についての…
あるいは 〜私の TeX プログラム変換環境〜 【むなしく宣伝】 TeX & LaTeX Advent Calendar \textbf を語ろう、時には \futurelet を語ろう 初心者な人も TeXnician な人も、TeX 芸人な人も。 (詳細は ATND のページで) ステップ 5 : TeX コードに一気に…
あるいは 〜私の TeX プログラム変換環境〜 【しつこく宣伝】 TeX & LaTeX Advent Calendar LaTeX も TeX も TeX のうち 初心者さん、いらっしゃ〜い! (詳細は ATND のページで) 配列を「名前参照」に書き換える 前回の考察を踏まえて、Lua のプログラム…
あるいは 〜私の TeX プログラム変換環境〜 かなり間が空いたが、前回の続き……だけどその前に宣伝。 TeX & LaTeX Advent Calendar TeX で騒げ、TeX で笑え 皆さんの、心をこめたネタをお待ちしております! ※初心者大歓迎。 いやマジで。 (詳細は ATND の…
最近、TeX がそのブログネタ作成用言語としての能力を存分に発揮する事例が増えていて、それは大変喜ばしいことである。しかしそれと同時に非常に残念な事実も存在する。それは、TeX と同時にインストールされる BibTeX が持っているはずのネタ作成能力がほ…
例の LISP on TeX がかなり LISP になってきている。ということは何かネタを出す必要性が否応無く生じるわけであるが、ちょっと様子見ということで、階乗で「えるたそ」してみた。肝心の「千反田える」が現れないが気にしない。 (リストを多用するプログラ…
ステップ 4 : 式と実行制御の関連の処理 元のプログラムはシリーズ(5)の最後に掲載した eltaso2.lua。 式を分解する 整数の四則演算について、TeX には単純な + - * / は無くて、(C言語の)複合代入 += -= *= /= に相当する機能だけが用意されている。(Lu…
補足: TeX に関数はないといえなくもない事情前回の記事では、(戻り値のある)関数を(戻り値のない)手続きに置き換えるという変換操作を行った。そしてそれが必要な理由としてTeX には関数がないと述べた。ところがこれについて違和感を持つ人がいるかも…
あるいは 〜私の TeX プログラム変換環境〜 ステップ 3 : 関数に関連する処理を行う 元のプログラムは前回の記事の最後に掲載した eltaso1.lua。 関数を追放する ここで「関数」というのは「戻り値を返す手続き」(だから式の中で使うことができる)のこと…
あるいは 〜私の TeX プログラム変換環境〜ステップ 2 : 変数関連の処理を行うここからは、Lua 言語の範疇において、元のプログラムを「TeX に近い」形に変換していく。元のプログラムを再掲しておく。[eltaso0.lua] alpha_name = { [0] = "ぜっと", "えー"…
あるいは 〜私の TeX プログラム変換環境〜 ステップ 1 : 仕様を決める 早速プログラムの変換を始めたいところだが、その前に。 パッケージの名前を決める すなわち \eltaso の実装コードを書きこむ .sty ファイルの名前を決める。ここでは tceltaso と命名…
(前回の続き) 解説の方針とか 当初、「このそれぞれの項目について詳細を説明する」という感じで記事を書いていこうと思っていた。しかしそうするとどうしても重たい解説が長く続くことになり、読者の負担になる恐れがある。ちょうど「普通の言語のプログ…
TeX 言語は他の一般に普及しているプログラム言語に比べると、習得が難しいと言われることが多い。その主因の一つだと思われるのが、TeX の実行モデルが他の言語と大きく異なることである。TeX 言語はその実行制御を「マクロの展開」という文字列(正確には…
(真っ当な道を踏み外しているという意味で) 今年の LL イベントである「LL Decade」で、プログラミング課題の出題があったようだ。 「君ならどう書く Online」 ところが信じられないことに、ネットで調べた限りでは、TeX で解いた人が誰一人として見当たら…
という無茶な願望は放っておいて。 まずはそもそも解くことができるかについて.問題はAtCoder Regular Contest #005のA,B,C あれぇ〜? Dは〜? 待っていても来なさそうなので、仕方が無いので、作ってみた。 (問題)%% arc005_4.tex \catcode`\@=11 %----…
例の「LISP on TeX」について。 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twit…
結局のところ、既存の if と同等のものを新たに実装しても、新しいことができる訳ではなくあまり面白くない。そこでもっと変態的な if 式を作ることを考えてみた。平凡な ifまずは、従来の「平凡な if 式」の仕様について確認することで、新しい定義で使う概…
前回の話でちょっと出した、残念な「メソッド的 if」について。 1.upto(20) do |n| (n % 15 == 0).if { puts 'FizzBuzz' }.else(n % 3 == 0).if { puts 'Fizz' }.else(n % 5 == 0).if { puts 'Buzz' }.else { puts n } end (真偽値).if {...} の形に合わせて…
Ruby女子と高らかに宣言しておきながら好きな関数がifというのは解せぬ。Rubyistではない僕でもRubyにおいてifが関数ではなく制御構文であることは知っています。どういうことなのか。Rubyの話ではないということでしょうか。確かに「好きなRubyの関数」など…
某掲示板のアレの話。 \generateabbrevdef{XXX}{\CS}{<本体>}(ただし一般的に <本体> は第 2 引数の制御綴 \CS を含む)は以下の仕様の命令 \defineabbrevXXX を定義する。 \defineabbrevXXX{<文字列>,...} は、引数のリストの中の各々の文字列 Y について…
LISP on TeX なアレが更新された*1ようなので、コレをその文法で書き換えてみた。\documentclass{article} \usepackage{lisp} \begin{document} % もちろん'%'以降は単なるコメント \lispread\expA{% ((\lambda \zero %<LET> ((\lambda \inc %<LET> ((\lambda \two %<LET> (</let></let></let>…
これは嘘ニュースです (重要なことなので予め反転しました) 要するに、Google の素晴らしいオモチャの綺麗なグラフィックを残念なテキストに変換した、ということ。 これだけで何となく解ると思うが、一応説明しておく。*1 機械はテープとプログラムとプロ…
[2012-07-07 補足]「LISP on TeX」の作者は @hak7a3 さんです。念のため。 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); j…
注意: これはネタです。 (アレとかコレ(コメントも)とかは読んでいる前提で。) PGF の oo モジュールによる OOP では、属性(インスタンス変数)に対するクラス外のコードでのアクセスを認めていない。だから、アクセサメソッド(getter/setter)を用…
(前回の続き) ところで、templatex の実装(というよりテンプレートエンジン ixsst の実装)は ERB の処理方法をそのまま真似ている。ERB で同様の例を試してみた。<%def test(n) 1.upto(n) { |i| %> (<%=i%>) <% } end %> <% test(5) %> これを実行すると…
(前回の続き) 正しい方法その 3: 完全展開可能にする シリーズ(1)において、\xx@remainder の実装で最後に単純に \the\xx@a を置くのは、結局戻り値を使う術がないから失敗すると述べた。特に\edef\result{\xx@remainder{100}{42}}は \xx@remainder の中…
(前回の続き) 正しい方法その 1: 戻り値をある特定の「変数」に代入させる ところで、先の失敗例の \xx@remainder のコードをもう一度見てみよう。最後の(失敗する)\the\xx@a の直前の時点で、\xx@a に「戻り値」になっている。だとすれば、それをその…
既にこのブログでは何度も話題に出ているように、TeX には、他の多くのプログラミング言語にあるような「関数」(ユーザ定義関数)の概念がない。*1この記事では「関数」に相当する機能をどうやって実現するかを解説する。 「関数」の一番大事な性質は、「戻…
*「え〜!? もう終わりと言ったじゃん!」 ZR「補足ですよ!」 *「何で『補足1』なんですか? 『〜2』もあるんですか?」 ZR「まあ、ないことを祈ろう」*1 「区切り付引数の罠」は expl3 に限った話でなく、普通の TeX でも全く同じことが起こる。参考の…