タグ別アーカイブ: TeX

LaTeX の \verb についてのメモ

導入

LaTeXをやったことがある人なら \verb コマンドはきっと知っているだろう。

例: \verb|hoge|hoge

例: \verb+foo bar+foo bar

亜種として、\verb の直後にスター * がついた版は、空白を可視化する(空白が ⎵ みたいな記号になる)。

例:\verb*+foo bar+foo⎵bar

この \verb というコマンドは、「TeXの特殊文字を無力化する」「任意の文字を終端として使える」という点で、非常に風変わりである。\verb コマンドを知ることは、TeXの字句解析のルール(カテゴリーコードとか)に対する理解を深めることに直結すると言っても過言でないだろう(たぶん)。というわけで、\verb について重箱の隅をつついた結果をここに書いておく。

なお、TeXにおける「カテゴリーコード」とかそういうアレはここでは解説しない(対象読者が謎)。

続きを読む

dvisvgmとSTIXフォント

以前、dvisvgmについてちょろっと書いた。その時は、dvisvgmでSVGファイルを生成する時に --no-fonts オプション(文字のアウトライン化をする)をつけないとフォントが正常に指定されないという結論だったわけだが、それではブラウザで表示した時に文字が選択できない。

そこで、dvisvgmで --no-fonts オプションを使わずに生成したSVGファイルで、文字が正常に表示されるような方法を考えてみよう。

続きを読む

LaTeXでPDF出力する際のTips その2

LaTeXでPDF出力する際のTips では、

  • PDFのメタデータの文字化けの解消方法
  • PDFのタイトルや作成者を \title, \author から自動的に設定する方法

を扱った。

今度は、PDFの目次(ブックマーク、しおりと呼ぶこともあるようだが、この記事では「目次」で通す)についてのTipsを扱う。

続きを読む

TeXでファイルの更新日時を取得する

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が必要で、pTeXXeTeXでは動かない。

【2016年12月12日 追記】ε-pTeX では \pdffilemoddate を含むいくつかの pdfTeX primitive が実装されているため、 filemod パッケージを使うことができる。参考:ε-pTeX について

TeX界隈のロゴをHTML+CSSで

TeXのロゴは、真ん中の“E”の文字が下に下がっていて、2次元的になっている。プレーンテキストではこういうのが表現できないので“TeX”のように小文字で代用するわけだが、HTML文書でそんなことをするのは甘えである。

そこで、HTML+CSSでTeXのロゴを再現してみよう。(TeXのロゴよりもLaTeXの方が見た目を調整する要素が多いので、ここでは、LaTeXのロゴで行う)

案1

愚直に、AとEの位置をCSSのvertical-alignプロパティーでずらした。

表示例: LATEX

コード例(見やすいように改行とか空白とか使ってインデントしている)

<span style="font-family: serif;">
  L
  <span style="vertical-align: super;">
    A
  </span>
  T
  <span style="vertical-align: sub;">
    E
  </span>
  X
</span>

案2

なんか本物はAの文字が小さい気がする。font-size: smallerを指定しよう。

表示例:LATEX

<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>

案3

本物は文字の間隔が詰まっている気がする。letter-spacingを指定しよう。letter-spacingの値は、検討の余地があるだろう。

表示例:LATEX

<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>

案4

最近のSafari、そして直近のFirefoxにはリーディングモードだかリーダーモードが搭載されている。このモードではサイト側で指定したCSSがだいたい無効になる。そうすると、案1〜案3で書いたLaTeXはすべて大文字の“LATEX”になってしまう。これは好ましくない。CSS無効の場合は“LaTeX”になってほしい。

そこで、HTMLとしてはAとEを小文字で書いておき、CSSのtext-transform: uppercaseで見た目を大文字にする。

表示例:LaTeX

<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>

ちなみに、この方式で書いた“LaTeX”ロゴをブラウザからコピペした場合、Safariだとすべて大文字で、FirefoxだとAとEが小文字でコピーされた。

おまけ:XeTeX

XeTeXとかいうやつは2文字目のEが反転している。最新のCSS技術を使えば、特定の文字を反転させるのもお手の物である。

表示例:XeTeX

<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>

おまけ:WordPressで

このブログはWordPressで動かしているわけだが、LaTeXに言及するたびに長ったらしいHTMLを書き込むのはだるい。また、「以前はこういう書き方してたけどやっぱりこの書き方の方がいいな」となったときにいちいちLaTeXロゴを使っている記事を探して置換するのはだるい。

そこで、WordPressのテーマをいじって、本文中に [LaTeX-logo] と書けばそれがLaTeXロゴを表すHTMLに化けてくれるようにしよう。(こういう風に “[” “]” で囲むやつを、WordPress用語でshortcodeと言うらしい)

テーマのfunctions.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' );

真面目にやるなら

この記事ではなんとな〜くノリでロゴの見た目を調整したが、真面目にやるならTeXでの \TeX コマンドの定義を見て文字の大きさとか位置を調整するべきだろう。

ググったらそういうことをやっている人がいたのでリンクを貼っておく。

Xy-picとdvisvgm

LaTeXで図式を書くのに、Xy-picというパッケージがある。このパッケージで書いた図式を、dvisvgmコマンドでSVG形式に変換しようという話。

大まかな流れ:

  1. Xy-picで作った図式を含むLaTeXソースをコンパイルしてDVIファイルを作る。
  2. DVIファイルをdvisvgmコマンドでSVG形式に変換する。

今回ハマったポイント(結論):

  • Xy-picにはPostScriptやPDFなどのバックエンド(ドライバー)を指定しよう。
  • dvisvgmに--no-fontsを指定することでSVGファイルの文字を正しく表示できるようになる。

以下、結論に至るまでの過程: 続きを読む

TeX処理系の気に食わない点(0) — エラー時の挙動

明治維新で新政府がTeXを旧来の陋習として弾圧したとき、TeX使いたちはわざとTeXの使い勝手を悪くすることで難を逃れたと伝えられています。 — TeXしぐさ

↑「適当にでっち上げた嘘です」と注記しようと思ったが元ネタも適当にでっち上げた嘘だった

TeXの気に食わない点…はきっと皆さんいろいろあると思うが、ここではTeX処理系の挙動に絞った話をする。ここに書いた挙動に関しては、TeXpdfTeXXeTeXも大差はないようである。

続きを読む

TeXを勉強したい

LaTeXではない方の)plain TeXを勉強すべしという電波を受信したので、勉強しようと思った。

じゃあ何を読んで勉強しようかという話だが、TeX Wiki内のTeX入門/マクロの作成 – TeX Wikiというページが入門として良さそうだった。

もうちょっとまじめに勉強しようとなると、TeXの本 – TeX Wikiの下の方にある

あたりを読むと良さそう。