hyperrefパッケージをうまく使って、メタデータとかブックマークがついたPDF文書を作ろう。
参考文献:
hyperrefパッケージをうまく使って、メタデータとかブックマークがついたPDF文書を作ろう。
参考文献:
以前、UT-mateの使い勝手を上げるGreasemonkeyスクリプトを書いたが、それをChrome拡張化してみた。
Greasemonkeyのuserscriptも chrome://extensions/ にドロップすればなんか勝手に拡張として扱ってくれるようなのだが、一般人にuserscriptをダウンロードさせて chrome://extensions/ を開かせてうんぬんさせるよりはChrome Web Storeで入手出来るChrome拡張の方が導入しやすいだろうということで、Chrome拡張化してみることにした。
このuserscriptではGreasemonkey特有の関数( GM_*
)は使っていないので、拡張機能の作り方のContent Scriptsのページを読んで manifest.json
を適当に書いてやってパッケージしてやればChrome拡張になる。
Chromeの機能でChrome拡張のパッケージ(.crx
)を作れるようだが、Chrome Web Storeで配布する際はzipアーカイブをアップロードすれば向こうで適当に .crx
を作ってくれるっぽい。
作ったChrome拡張(とかWebアプリ)をChrome Web Storeで初めて公開するには、Googleに5ドルのみかz…登録手数料を払う必要がある。まあ一回払えばいくらでも拡張機能やWebアプリを公開できるからそんなに高くない…と思ったけど20個の上限があった気がするぞ…。
そんなわけで作ったChrome拡張がこちら。
Chrome Web Storeではなんかすれば課金もできるみたいだけど、この程度のアレで課金して誰もダウンロードしてくれないよりは、無料でダウンロードしてもらって自分の承認欲求を満たした方が良いなあと思った。
ちなみに、Chrome拡張化の際にuserscript本体はいじる必要はなかったが、UT-mateのページが仕様変更していたみたいで、そのための修正は必要だった。
Firefoxの人は従来通りGreasemonkeyを使って Better_UT-mate.user.js をインストールすれば良い。
Safariの人はTampermonkeyとかいうのを使えば良さそう。Safariの拡張機能でもChrome拡張と同じようなことができる感じがするが、Appleに登録か何かしないといけないようなので面倒くさい。
TeXでは \today
で現在の日付を取得できる。\maketitle
で \date
を省略すると現在の日付になる。
しかし、TeX文書の「内容」に関わる日付と言ったら、ファイルの更新日時ではないだろうか。タイトルのところにファイルの更新日時を(自動で)出す方法はあるか。
ググってみたら割と簡単に答えが出てきた。
pdfTeXだと \pdffilemoddate
というプリミティブがあるらしい。例えば \pdffilemoddate{\jobname}
と書くとコンパイル中のファイルの更新日時が D:20150829212230+09'00'
というようなフォーマットで取得できるようだ。
LuaTeXだと \pdffilemoddate
はないが、Luaを使えば同じようなことはできるだろう。まあ自分でLuaコードを書いて実装するのは面倒なので、既製品を使おう。
filemodというパッケージはpdfTeXとLuaTeXで使えて、ファイルの更新日時を取得するだけじゃなくて、\today
と同じような読みやすいフォーマットにしてくれるようだ。例えば、ファイルのプリアンブルに
\usepackage{filemod}
\date{\Filemodtoday{\jobname}}
と書けばタイトルの日付がファイルの更新日時になる。
複数のファイルの中で最も新しい更新日時を使いたいときは、試してないけど \filemodNewest
を使えば良さそう。
既に書いたように、filemodパッケージはpdfTeXかLuaTeXが必要で、pTeXやXeTeXでは動かない。
【2016年12月12日 追記】ε-pTeX では \pdffilemoddate
を含むいくつかの pdfTeX primitive が実装されているため、 filemod パッケージを使うことができる。参考:ε-pTeX について
またMacのSSDの空き容量が減ってきたので、なんとかする。
duコマンドでホームディレクトリ以下を検査して、容量を食っているやつをチェックする。
20GBくらい。
こういうバックアップの類はなるべく消したくないタチなので、できれば外付けドライブとかに移したい。ググったらシンボリックリンクを貼れば良いというのが出てきたが、リンク先のドライブが接続されてない場合の挙動が心配である。
というわけで今回はパス。
7.1GBくらい。
中でも、 iOS DeviceSupport
というサブディレクトリが6.3GBほど食っているようである。
ググって調べたところ、新しいiOSデバイス、または新しいiOSの入ったデバイスを接続すると iOS DeviceSupport
の中身が増殖するらしい。
$ rm -r 7.1.* 8.0.* 8.1.*
のようにして、最新のバージョン(8.4)以外を削除。
7.10.2を入れたので7.8.3には消えてもらう。手順は前の記事に書いた。
TeXのロゴは、真ん中の“E”の文字が下に下がっていて、2次元的になっている。プレーンテキストではこういうのが表現できないので“TeX”のように小文字で代用するわけだが、HTML文書でそんなことをするのは甘えである。
そこで、HTML+CSSでTeXのロゴを再現してみよう。(TeXのロゴよりもLaTeXの方が見た目を調整する要素が多いので、ここでは、LaTeXのロゴで行う)
愚直に、AとEの位置をCSSのvertical-alignプロパティーでずらした。
表示例: LATEX
コード例(見やすいように改行とか空白とか使ってインデントしている)
[code lang=”html”]
<span style="font-family: serif;">
L
<span style="vertical-align: super;">
A
</span>
T
<span style="vertical-align: sub;">
E
</span>
X
</span>
[/code]
なんか本物はAの文字が小さい気がする。font-size: smallerを指定しよう。
表示例:LATEX
[code lang=”html”]
<span style="font-family: serif;">
L
<span style="vertical-align: top; font-size: smaller;">
A
</span>
T
<span style="vertical-align: sub;">
E
</span>
X
</span>
[/code]
本物は文字の間隔が詰まっている気がする。letter-spacingを指定しよう。letter-spacingの値は、検討の余地があるだろう。
表示例:LATEX
[code lang=”html”]
<span style="font-family: serif; letter-spacing: -0.1em;">
L
<span style="vertical-align: top; font-size: smaller;">
A
</span>
T
<span style="vertical-align: sub;">
E
</span>
X
</span>
[/code]
最近のSafari、そして直近のFirefoxにはリーディングモードだかリーダーモードが搭載されている。このモードではサイト側で指定したCSSがだいたい無効になる。そうすると、案1〜案3で書いたLaTeXはすべて大文字の“LATEX”になってしまう。これは好ましくない。CSS無効の場合は“LaTeX”になってほしい。
そこで、HTMLとしてはAとEを小文字で書いておき、CSSのtext-transform: uppercaseで見た目を大文字にする。
表示例:LaTeX
[code lang=”html”]
<span style="font-family: serif; letter-spacing: -0.1em;">
L
<span style="vertical-align: top; font-size: smaller; text-transform: uppercase;">
a
</span>
T
<span style="vertical-align: sub; text-transform: uppercase;">
e
</span>
X
</span>
[/code]
ちなみに、この方式で書いた“LaTeX”ロゴをブラウザからコピペした場合、Safariだとすべて大文字で、FirefoxだとAとEが小文字でコピーされた。
XeTeXとかいうやつは2文字目のEが反転している。最新のCSS技術を使えば、特定の文字を反転させるのもお手の物である。
表示例:XeTeX
[code lang=”html”]
<span style="font-family: serif; letter-spacing: -0.05em;">
X
<span style="vertical-align: sub; text-transform: uppercase; transform: scale(-1,1); -webkit-transform: scale(-1,1); display: inline-block;">
e
</span>
T
<span style="vertical-align: sub; text-transform: uppercase;">
e
</span>
X
</span>
[/code]
このブログはWordPressで動かしているわけだが、LaTeXに言及するたびに長ったらしいHTMLを書き込むのはだるい。また、「以前はこういう書き方してたけどやっぱりこの書き方の方がいいな」となったときにいちいちLaTeXロゴを使っている記事を探して置換するのはだるい。
そこで、WordPressのテーマをいじって、本文中に [LaTeX-logo]
と書けばそれがLaTeXロゴを表すHTMLに化けてくれるようにしよう。(こういう風に “[” “]” で囲むやつを、WordPress用語でshortcodeと言うらしい)
テーマのfunctions.phpに以下を書き込む。何をやっているかは、雰囲気でわかるだろう。
[code lang=”php”]
function tex_logo_shortcode() {
return "<span style=\"font-family: serif; letter-spacing: -0.1em;\">T<span style=\"vertical-align: sub; text-transform: uppercase;\">e</span>X</span>";
}
add_shortcode( ‘TeX-logo’, ‘tex_logo_shortcode’ );
function latex_logo_shortcode() {
return "<span style=\"font-family: serif; letter-spacing: -0.1em;\">L<span style=\"vertical-align: top; font-size: smaller; text-transform: uppercase;\">a</span>T<span style=\"vertical-align: sub; text-transform: uppercase;\">e</span>X</span>";
}
add_shortcode( ‘LaTeX-logo’, ‘latex_logo_shortcode’ );
function XeTeX_logo_shortcode() {
return "<span style=\"font-family:serif;letter-spacing:-0.05em;\">X<span style=\"vertical-align:sub;text-transform: uppercase;transform:scale(-1,1);-webkit-transform:scale(-1,1);display:inline-block;\">e</span>T<span style=\"vertical-align:sub;text-transform: uppercase;\">e</span>X</span>";
}
add_shortcode( ‘XeTeX-logo’, ‘XeTeX_logo_shortcode’ );
function xypic_logo_shortcode() {
return "<span style=\"font-family: serif;\"><span style=\"letter-spacing: -0.2em;\">X<span style=\"vertical-align: sub; text-transform: uppercase;\">y</span></span>-pic</span>";
}
add_shortcode( ‘xypic-logo’, ‘xypic_logo_shortcode’ );
[/code]
この記事ではなんとな〜くノリでロゴの見た目を調整したが、真面目にやるならTeXでの \TeX
コマンドの定義を見て文字の大きさとか位置を調整するべきだろう。
ググったらそういうことをやっている人がいたのでリンクを貼っておく。
先月はECMAScript 2015 (ECMAScript 6)が採択され、また、WebAssemblyが発表された。多分これらは現代のWebプログラミング言語の歴史に残る出来事だろう。しかし、ここ10年ぐらいのJavaScript/ECMAScriptの歴史と背景事情みたいのをまとめた文章のようなものをあまり見かけないので、ちょっとだけ書いてみることにする。(というよりは「ちょっとだけ調べてみた」の方が適切。あんまりまとまってないし)
何日までに○○しなさいというメールが届いた!けどほったらかしておいたら期限を過ぎていた!そういう経験、あるよね?
そこで、そういうメールが届いたら自動でMacの「リマインダー」に登録されるようにしよう!という話。
続きを読む
最近、豊穣圏(enriched category)という概念に触れることがあって、それの標準的な教科書って何かなあと思ったら、G.M.Kelly “Basic Concepts of Enriched Category Theory”というのがそれっぽくて、しかも無料でPDFをダウンロードできるらしい。
MacLaneのCWMには豊穣圏の名前といくつかの例は出てくるけどちゃんとした定義は出てこない。まあ、ちゃんとした定義を書こうとするとモノイド圏(monoidal category)の定義をしてうんたらしないといけないようだが。
豊穣圏というのは(今の自分の理解で)大雑把に言うと、圏のhom-setに単なる「集まり」以上の構造が入ったものである。例えば、加群の圏には、それぞれのhom-setにアーベル群の構造が入っているので、アーベル群の圏 Ab でenrichされた圏の例となっている。
別の例を挙げると、各hom-setにゼロ射が入っている圏は、それぞれのhom-setに点つき集合の構造(ゼロ射が基点)が入っているとみなせる。つまり、ゼロ射を持つ圏は、点つき集合の圏 Set* でenrichされた圏と言える。
各hom-setに構造が入っていればいいというものではなくて、Ab-enriched categoryだと射の合成が双線形、Set*-enriched categoryだとゼロ射(hom-setの基点)を合成するとゼロ射、という風に、合成の方にも条件が付いてくる。この辺の条件を表現するのに、モノイド圏の構造が必要になる。