マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

2012-02-01から1ヶ月間の記事一覧

何か関数のようなもの (3)

(前回の続き) 正しい方法その 3: 完全展開可能にする シリーズ(1)において、\xx@remainder の実装で最後に単純に \the\xx@a を置くのは、結局戻り値を使う術がないから失敗すると述べた。特に\edef\result{\xx@remainder{100}{42}}は \xx@remainder の中…

TeX で何か関数のようなものを (2)

(前回の続き) 正しい方法その 1: 戻り値をある特定の「変数」に代入させる ところで、先の失敗例の \xx@remainder のコードをもう一度見てみよう。最後の(失敗する)\the\xx@a の直前の時点で、\xx@a に「戻り値」になっている。だとすれば、それをその…

TeX で何か関数のようなものを (1)

既にこのブログでは何度も話題に出ているように、TeX には、他の多くのプログラミング言語にあるような「関数」(ユーザ定義関数)の概念がない。*1この記事では「関数」に相当する機能をどうやって実現するかを解説する。 「関数」の一番大事な性質は、「戻…

文字列の置換

再び TeX 言語の練習問題を出してみる。 以下の要件を満たすマクロ \replaceWordAll を実装せよ。 \replaceWordAll{<前>}{<後>}{<対象>} は <対象> の文字列に含まれる全ての <前> に一致する部分を <対象> に置換した文字列を結果として返す。 置換の結果の…

expl3な言語で完全展開可能な関数(マクロ)を作る件について (補足1)

*「え〜!? もう終わりと言ったじゃん!」 ZR「補足ですよ!」 *「何で『補足1』なんですか? 『〜2』もあるんですか?」 ZR「まあ、ないことを祈ろう」*1 「区切り付引数の罠」は expl3 に限った話でなく、普通の TeX でも全く同じことが起こる。参考の…

expl3な言語で完全展開可能な関数(マクロ)を作る件について (8)

(前回の続き) 誰得感満載のこのシリーズがいつの間にか 8 回目になってしまった。しかし、今回が最終回なので安心してほしい(謎)。 関数 \zrxxnz_tail:n ― 正しい cdr の作り方 前回で保留になっていた関数 \zrxxnz_tail:n について述べることにする。 …

expl3な言語で完全展開可能な関数(マクロ)を作る件について (7)

(前回の続き) 「展開可能のジレンマ」から抜け出す シリーズ(5)〜(6)において、「iota で生成した整数列を map に通す」というロジックを expl3 で実装しようとしたが、そうすると「完全展開可能」と「制限付展開可能」の差異のせいで全体を展開可能にする…

二分木の処理を完全展開可能にする(3)

(前回の続き) 出題の 3 つの関数の実装 前回に作った補助関数 \zrxxpz_tree_dispatch:NNn を用いて、問題で求められている 3 つの関数(\sumLeaves、\treeDepth、\sumLeavesWithin*1)を実装することにする。前回のコードと同じ部分がかなりあるが敢えて完…

二分木の処理を完全展開可能にする(2)

(前回の続き)共通部品の実装 それでは、前回に示した方針に従って、実際に \zrxxpz_do_tree:NNn を作ってみる。ただし事情があって名前は \zrxxpz_tree_dispatch:NNn に変更している。以下のコードで本質的なのは、最初の \zrxxpz_tree_dispatch:NNn (と…

二分木の処理を完全展開可能にする(1)

…つまり、2011-08-31 の記事の問題 4 を完全展開可能なように作る件について。ただし expl3 を使用して。 これを行うに際して一番難しいと思われる問題は、「それをする真っ当な理由を構築すること」であろう。これについては賢明な読者への課題として残して…

expl3な言語で完全展開可能な関数(マクロ)を作る件について (6)

展開可能性のジレンマところが、実はまだ大きな罠が残っている。それは、\exp_args:Nx 自体が展開可能でないということである。((マニュアル(interface3)を見れば判るが、他の \exp_args:N? は全て完全展開可能であるのに、\exp_args:Nx だけ制限付展開可…

expl3な言語で完全展開可能な関数(マクロ)を作る件について (5)

「関数」のような関数の実現法完全/制限付展開可能について注意すべきこととして、例え展開可能な関数であっても、それを(他の言語の「関数」のように)引数に入れて組み合わせたものは、必ずしも正しい動作にならないということである。これは、ただ「展…

ある悲劇的なジョーク、または TeX の質問をするための練習問題 (2)

TeX

(前回の続き) というわけで、「他人に TeX について質問するのに堪えられるだけの TeX の基礎知識があるかを判定する」問題を出題する。制限時間の目安は 24 時間で、他人(人間)に質問する以外であれば、任意の文献を参照してかまわない。 7 問中 4 問以…

「この pTeX は UTF-8 対応か」を調べる方法

TeX

(少し予定変更。「練習問題」は明日の夜に掲載します。)周知の通り、「ある程度新しい」pTeX は UTF-8 での入力が扱える。しかし、「ある程度古い」pTeX を使っている人の中には、今自分の使っている pTeX エンジン(ptex/platex コマンド)が UTF-8 入力…

ある悲劇的なジョーク、または TeX の質問をするための練習問題 (1)

TeX

Java で計算をするプログラムを書こうと思ってます。Java の本とかは読んだことがありません。試しにこんなのを書いてみました。 a = 3; b = 4; System.out.println("Answer = ", a + b);これをコンパイルしたら、次のようなエラーが出ました。 C>javac test…

expl3な言語で完全展開可能な関数(マクロ)を作る件について (4)

再びナベアツの話「TeX なんかやめて expl3 を使えば!?」の記事で \NabeAzzX の expl3 の言語での実装を掲載した。続いて本シリーズ第 1 回における補足説明の記事の最後で、\NabeAzzX の実装の中で使われている \prg_stepwise_function:nnnN は完全展開可…

例の10万ページのアレ

TeX

結局、フォーラムには書く機会を逃してしまった……。(dvipdfmx を使うという前提の場合は)dviselect(のような「DVI を分割するツール」*1)を使うのが最適だと思う。しかし、一応、LaTeX 上でも「分割コンパイル」は可能なので、ネタとして紹介しておく。…

例の列ベクトルなアレを expl3 で

TeX

\documentclass{article} \usepackage{amsmath} \usepackage{xparse} \ExplSyntaxOn %------------------------ %% 変数 \tl_new:N \zrxx_content_tl % 行列の中身 %% \zrxx_cvector:w <コンマリスト> ; % \cvector の実体。 \cs_new:Npn \zrxx_cvector:w #1…