2014年5月20日火曜日

emacs内でTeX文書の作成からpdf閲覧まで行う

TeX WikiのEmacsに関する記述を見ていると,sheepheadさんのblog記事:Emacs上のPDFでisearch,occur,imenuとかなんでもしてしまうpdf-toolsの紹介が紹介されていました.Emacs23を導入したときに,EmacsでPDFファイルを表示するDocViewを試したことがありましたが,使い勝手が悪かったためすぐに使わなくなりました.

まずdoc-view-modeの基本的な操作法をまとめておきます.
キーコマンド機能
n'doc-view-next-page次のページ
p'doc-view-previous-page前のページ
C-n'doc-view-next-line-or-next-page1行下方へスクロール
C-p'doc-view-previous-line-or-previous-page1行上方へスクロール
SPACE'doc-view-scroll-up-or-next-page下方スクロールまたは次のページ
DEL'doc-view-scroll-down-or-previous-page上方スクロールまたは前のページ
k'doc-view-kill-proc-and-bufferプロセスを終了しバッファを閉じる
g'revert-bufferバッファを閉じる
+'doc-view-enlarge拡大
-'doc-view-shrink縮小
カーソルキー -上下左右方向へスクロール
M-g M-g 'doc-view-goto-page指定したページへ移動
M->'doc-view-first-page最初のページへ移動
M-<'doc-view-last-page最後のページへ移動

上述の記事ではEmacsのdoc-view-modeの使い勝手を良くするEmacs拡張アプリであるpdf-toolsを紹介していたので,早速試してみました.環境はMac OS X MavericksでEmacs 24.4.50を使用しています.

pdf-toolsを検索してみたのですが,検索上位に現れるGitHubのpolitza/pdf-toolsはLinux環境を前提としているようで,そのままソースをコンパイルしてみるとエラーが出ます.ソースコードを少し書き直すとMacでも使えたという情報も見かけたものの,ソースコードをいじる技術力がないので,誰かMacに対応したものを作っていないか他力本願で探してみるとGitHubにありました.

axot/pdf-toolsからzipファイルをダウンロードして展開し,ソースをコンパイルしてみるとすんなり通りました.するとソースを展開したフォルダにpdf-tools-0.20.tarというファイルが出来たので,Emacs上で
M-x package-install-file RET pdf-tools-0.20.tar RET
としてインストールしました.これでdoc-view-mode上で動作する色々なマイナーモードが使用可能になります.

M-x pdf-tools-helpで各マイナーモードや用意されている関数の説明を見ることができます.


EmacsからC-x, C-fでpdfファイルを選択して開き
  • pdf-isearch-minor-mode
  • pdf-sync-minor-mode
  • pdf-link-minor-mode
を試しました.まずdoc-view-modeはimagemagickのconvertコマンドを使ってpdfファイルをpngファイルに変換してEmacsのウィンドウ内に表示します.数ページのpdfファイルであればその変換にかかる時間が気にならないと思いますが,私は普段から数百ページのファイルを扱うことが多いため変換に時間が掛かり,LaTeXファイルのタイプセットの度にpdfファイルを再読み込みして変換をしなければならないため,この時点ですでにげんなりしてしまいます.画像ファイルの解像度が粗いのも気になりました.

pdf-toolsで今回試したマイナーモードはいずれもよく働きます.
isearchでは,検索した語句がハイライトされました.

pdf-links-minor-modeをonにすると,pdfのhyperlinkでジャンプ出来るようになりました.またpdf-sync-minor-modeでは,pdfのダブルクリックした部分に該当するTeXソースファイルの内容が表示されることを確認できます.
逆にソースファイルからpdfへジャンプする機能については,helpを見ると設定のための関数が用意されているので出来るとは思いますがそこまでは試していません.

ページの遷移がコマンドで済むことやisearchが出来ることは便利なのですが,ページ数の多いファイルをタイプセットする毎にpdfファイルを読み直して画像ファイルへ変換するという手間がかかることを考えるとあまり実用的ではないかなぁ.

2014年5月2日金曜日

tikzを用いた部,章,節のカスタマイズ

TeX Stack Exchangeのサイトを眺めていて,tikzを使った各種見出しのデザイン変更の仕方でとても格好の良いものが幾つかあったため,リンクをまとめてみます.

tikzを使えばこんなことも出来るのかと感心させられました.

2014年5月1日木曜日

mdframedを用いた定理環境の修飾(platex+dvipdfmx, tikz)

追記:2016/04/19 定理環境をmdframedを使ったものからtcolorboxを使ったものに変更しました。

以前にplatexではmdframedでtikzを使った描画はうまくいかない風なことを書きましたが,あれはウソでした。すみません。

mdframedパッケージを読み込む前に,graphicxパッケージにdvipdfmxオプションを付けて読み込んでおけば使えました。

前回記事にした定理環境では,定理の番号に章番号や節番号を付けて出力したり参照したりするときに不便なため,書き直しをしました。次のように記述しておけば,platex+dvipdfmxできちんとした出力が得られます。
\documentclass[a4paper,10pt,papersize]{jsarticle}
\usepackage{amsmath,amssymb,mathrsfs}
\usepackage{etoolbox}
\usepackage[svgnames]{xcolor}
\usepackage[dvipdfmx]{graphicx}
\usepackage[framemethod=tikz]{mdframed}

\newcounter{theo}
\numberwithin{theo}{section}
\newenvironment{theo}[1][]{%
\refstepcounter{theo}%
\ifstrempty{#1}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=blue!20]
{\strut 定理~\thetheo.};}}}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=blue!20]
{\strut 定理~\thetheo.~#1};}}%
}%
\mdfsetup{innertopmargin=5pt,linecolor=blue!20,%
linewidth=2pt,topline=true,
frametitleaboveskip=\dimexpr-\ht\strutbox\relax,}
\begin{mdframed}[]\relax%
}{\end{mdframed}} 


\begin{document}

\section{Riemann積分}
\begin{theo}[Riemann積分の線型性]
\label{theo:riemann}
$\mathscr{R}(I)$を$\mathbb{R}^n$の有界閉区間$I$上でRiemann可積分な実数値関数全体
 の集合とする.$\mathscr{R}(I)$は実ベクトル空間であり,$I$上の積分は
$\mathscr{R}(I)$から$\mathbb{R}$への線型写像である.即ち
\begin{equation}
 f, g\in \mathscr{R}(I),\ c\in \mathbb{R}\text{ならば}
f+g\in \mathscr{R}(I),\ cf\in \mathscr{R}(I)
\end{equation}
であり,なおかつ
  \begin{gather}
  \int_I (f+g)(x)\, dx
 =\int_I f(x)\, dx + \int_I g(x)\, dx, \\
  \int_I cf(x)\, dx 
 = c\int_I f(x)\, dx
 \end{gather}
が成り立つ.
\end{theo}

定理\,\ref{theo:riemann}は凄い!

\end{document}


これを使って数学ノートのプリアンプルを書き換えました。現在は定理環境が次のような体裁になっています。