2017の24日めのために書きました。TeXの中でMarkdownを書ける先月のことなんですが、TeXの、TeXによる、TeXのためのMarkdownパーサをつくました。markdown-texhttps://github.com/k16shikano/markdown-texTeXで実装されてるので、当然、TeXで書く文書のなかで、シームレスにMarkdownを使えます。具体的には、こんな感じに、\begin{markdown}から\end{markdown}のなかにMarkdown記法が書けます。**Awesome**!\end{markdown}\end{document}これをふつうにTeXで処理すると、記法から期待されるようなPDFができるわけです。いっても、先月の時点でサポートしていた記法はそんなに多くなくて、これくらい。行頭の「*」で箇条書き行頭の「<」でインデント行頭の数字で連番箇条書き行頭スペース4個でインデントするとコードブロック化`..`で囲むとインライン等幅*..*で囲むとインラインイタリック**..**で囲むとインライン強調これ以外の要素を書きたかったら、いったん\end{markdown}して、生のTeXを書いてください。TeXなので、組版に関することなら、なんでもできます。2017で発表した「TeXは軽量マークアップ言語の夢を見るか」のために作ったものです。この発表では、Markdownをはじめとするマークアップ記法と、TeX(LaTeX)によって得られる表現力との関係について考察しました。「Markdownについて話すのにMarkdownパーサの実装経験がなければ刺されるかも」という強迫観念から取り組んだ、概念実証のための実装です。Shikanoで、TeXのなかでMarkdownを使えるからといってうれしいことはあまりないし、それで済ませるつもりだったですが、せっかくTeXなので、先日ちょっと手を入れて\TeXくらいは生で書けるようにしました。...しかし、実はこれは誇大広告で、厳密にいうと2つの条件を満たすマクロやコマンドだけがMarkdown記法の中で使えます。1つめの制約は、完全展開できる必要があるという点です。\sqrtは使えません。これは、latex.ltxにおける\sqrtの定義では\@ifnextcharが利用されていて、そのなかでは展開されない\futureletが使われているからです。なんで完全展開可能性が必要かというと、Markdown記法の構文解析を簡単にするために、対象となるトークンリストをいったん「完全展開された文字列」へと変換しているからです。これにはexpl3の\tl_set_rescan:Nnxを使っています。その際、TeXの入力を完全展開すると空白文字が集約されてしまってMarkdown記法として構文解析できなくなるので、これらは文字列とみなして完全展開しています。}これで\md_tokens変数に「完全展開された文字列」が入るので、それを構文解析し、それをTeXの胃袋に送ってPDFを作らせる、というのが先月までの実装でした。-.\@mがそのままPDFに出てきてしまう状態でした。完全展開をやめればよさそうですが、前述したようにスペースの扱いの都合があるので、文字列にしてからパースするという方針は変えがたい。なると、完全展開された文字列をパースするときにTeXのプリミティブをパースしてコントロールシーケンスに変換し直し、それをTeXの胃袋に送ればいいのではないか?というわけで、そんなようなコードを追加して、無事に\TeXのようなマクロがMarkdown記法のなかに埋め込めるようになりました。}}ただし、実装をサボっているので、非標準的(?)な利用方法のコントロールシーケンスはパースできません。10pt{foo}とかはだめ。これがもう1つの制約です。今回のオチにしても、ここまでにやったことを振り返ると、事実上TeXでTeXをパースしているわけで、むだなことをした感が半端ない......。機能を使うのが一番お手軽です。このスタイルでは、数値を指定してさまざまな囲み数字のグリフ(あれば)を呼び出すという便利な機能が提供され...職務経歴書いろいろあって職務経歴書を作成してみることにしました。編集をお手伝いしました。編集をお手伝いしました。Blogger.自己紹介k16詳細プロフィールを。