2013年8月30日金曜日

LuaTeX-jaでギリシャ文字のイタリック体を表示する.


先日LuaTeX-jaでギリシャ文字のイタリック体が表示されないと書きましたが,
本日LuaTeX-jaの使い方を参考にフォントのプリセット設定を変更したところ無事ギリシャ文字のイタリック体も表示されました.

fontspec パッケージによる数式フォント置換が不都合な場合は,
\usepackage[no-math]{fontspec}
\usepackage[...]{luatexja-preset}
 のようにしてください.

という記述があったので,次のようなファイルをタイプセットしてみました.


\documentclass{ltjsarticle}
\usepackage{luatexja}
\usepackage{amsmath,amssymb,mathrsfs}

\usepackage[no-math]{fontspec}
\usepackage[hiragino-pro]{luatexja-preset}


\begin{document}
あいうえお

$\mathit{\Delta}$, $\Delta$
$\mathit{\Psi}$, $\Psi$,
$A$, $\mathit{A}$, $I$, $\mathit{I}$,
$B$, $\mathit{B}$
\end{document}


ギリシャ文字のイタリック体もきちんと表示されています.

2013年8月25日日曜日

LuaTeX-jaではギリシャ文字のイタリック体が表示されない件

表題の通りです.LuaTeX-jaの使い方を参照してフォントのプリセット設定を行うと生じる現象のようです.フォントの設定を行っていない場合はきちんと表示されます.
使っている環境はMacTeX2013です.

  • まずは欧文のみ,クラスファイルはarticleの場合
\documentclass{article}
\usepackage{amsmath,amssymb,mathrsfs}

\begin{document}
$\mathit{\Delta}$, $\Delta$
$\mathit{\Psi}$, $\Psi$,
$A$, $\mathit{A}$, $I$, $\mathit{I}$,
$B$, $\mathit{B}$
\end{document}

ギリシャ文字のイタリック体もきちんと表示されています.アルファベットはイタリック体との違いが微妙ですね.


  • 次に日本語+欧文で,クラスファイルはltjsarticleの場合
\documentclass{ltjsarticle}
\usepackage{luatexja}
\usepackage{amsmath,amssymb,mathrsfs}

\begin{document}
あいうえお

$\mathit{\Delta}$, $\Delta$
$\mathit{\Psi}$, $\Psi$,
$A$, $\mathit{A}$, $I$, $\mathit{I}$,
$B$, $\mathit{B}$
\end{document}

ギリシャ文字のイタリック体は表示されていますが,埋め込まれていない和文フォントがゴシック体で表示されてしまいます.



  • 最後にフォントの埋め込み設定を行った場合.クラスファイルはltjsarticleです.
\documentclass{ltjsarticle}
\usepackage{luatexja}
\usepackage{amsmath,amssymb,mathrsfs}
\usepackage[hiragino-pro]{luatexja-preset}


\begin{document}
あいうえお

$\mathit{\Delta}$, $\Delta$
$\mathit{\Psi}$, $\Psi$,
$A$, $\mathit{A}$, $I$, $\mathit{I}$,
$B$, $\mathit{B}$
\end{document}

日本語のフォントはきちんと明朝体が表示されますが,ギリシャ文字のイタリック体が消えました.

この他にも,フォントのプリセット設定を行うと,文字の上にアクセント記号を付けるスタイルファイルであるaccents.styとアクセント記号の命令の幾つかが重複していてエラーが出ます(\acute, \grave, \check, \breve, \bar, \hat, \dot, \tilde, \ddot, \vec).

また,いつもはplatexでタイプセットしている原稿をLuaTeX-jaでタイプセットしてみたときに,bxjacalcuxパッケージを使ってもzwに関連したエラーが出てしまいました.こちらについては原因がよくわかりませんでした.

2013年8月23日金曜日

定理環境の修飾 mdframed.sty

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

LaTeXの話です.定理環境の見栄えを変更するために,mdframed.styを用いています.mdframed.styの機能はpdfTeXなどでタイプセットすることを前提にしているようで,platexではマニュアルにある機能を十分に活かすことが出来ません.

2014/05/01追記:tikzパッケージを読み込む前に,graphicxパッケージをdvipdfmxのオプションを付けて読み込むことで,platex+dvipdfmxでも以下のような例は再現出来ました。こちらを参照。

LuaTeXはpdfTeXの後継であり,この日本語対応LuaTeX-jaが開発されています.これを使えばmdframed.styの機能を十分に使えるのではないかと思い試してみました.LuaTeX-jaはTeXLive2013には標準で含まれており,lualatexコマンドを使ってタイプセットします.

mdframed.styのマニュアルにあるものを借用して,次のようなファイルををタイプセットしてみました.

\documentclass[a4paper]{ltjsarticle}
\usepackage{luatexja}
\usepackage{amsmath,amssymb,mathrsfs}
\usepackage{etoolbox}
\usepackage{tikz}
\usepackage{mdframed}

\usepackage{luatexja-fontspec}

\defaultjfontfeatures{Scale=0.92487}
  % この行がない場合,luatexja-fontspec は
  % 和文フォントの大きさを欧文フォントの 0.962212 倍
  % ([lt]jclasses でのデフォルト設定と同じ)で定義する.
  % 上の指定は,[lt]jsclasses における欧文 10pt: 和文 13Q
  % という比率に合わせるためのもの.

\setmainfont[Ligatures=TeX]{TeXGyreTermes}
\setsansfont[Ligatures=TeX]{TeXGyreHeros}

\setmainjfont[BoldFont=IPAexGothic]{IPAexMincho}
\setsansjfont{IPAexGothic}

\newjfontfamily\jisninety[CJKShape=JIS1990]{IPAexMincho}


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

\begin{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}
\end{document}


いい感じです.Tikzを使いこなせるようになると色々出来そうです.また,日本語の設定はLuaTeX-jaの使い方をそのまま貼付けました.そちらにあるスタイルファイルの誤記は修正してみたものの,フォントの設定を何も書かないでタイプセットすると,フォントの埋め込みをしていないファイルは日本語が全てゴシック体で表示されてしまいました.

また,LuaTeX-jaの実行速度は現時点ではかなり遅いです.数ページ程度のファイルならばあまり気になりませんが,数百ページのファイルになるとplatex+dvipdfmxの方が大分速いです.また全角幅や全角高さを表すzw, zhが使えなくなり,\zw, \zhに変更しなければならないので,platexと併用するために,ZRさんの「LuaTeX-jaでzwを使う件について」を参考にBxjatoolバンドルを導入しました(Bxtoolboxにも依存するのでこちらも導入しました).これでタイプセットコマンドとtexファイルのプリアンブルを少し変更することで使い分けが出来るようになりました.

マクロは使いこなせないので,個人的にはまだまだplatexを使う機会のほうが多そうです.

2013年8月17日土曜日

array環境でのエラー


これまで全く気がつかなかったのですが,次のような数式をLaTeXでタイプセットすると
"missing number, treated as zero."というエラーメッセージがでてしまいます.

\begin{equation}
\begin{array}{l}
  [a_1, b_1]\times \dotsb \times [a_{i-1}, b_{i-1}]\times
 \{a_i\}\times[a_{i+1}, b_{i+1}]\times \dotsb \times [a_n, b_n]\\
  [a_1, b_1]\times \dotsb \times [a_{i-1}, b_{i-1}]\times
 \{b_i\}\times[a_{i+1}, b_{i+1}]\times \dotsb \times [a_n, b_n]
\end{array}
\end{equation}

これは1行目で\\を用いて改行した直後に[]で囲まれた文字列を持ってくると,改行後のスペースと勘違いしてエラーを起こすようです(例えば\\[3pt]と記述すると3pt行間が空く).エラーの回避方法としては,\\の直後に括弧を入れて\\{}とし,区切りを明確にしてやることだそうです.

これまでこういう数式を打ったことが無いことに軽く衝撃を受けました.

Windows 8にTex環境を構築(2) YaTeXの設定 ドル記号入力で数式入力モードへ

Emacsを使ってTeX原稿を作成するときにYaTeXが欠かせません.
Windowsの環境では,表題にあるような自動で数式入力モードに切り替わる環境設定の仕方がわからずに,原稿を作成していてストレスがたまるために,ネイティブなTeX環境を構築するのを半ばあきらめ気味でした.

MacでKeyRemap4MacBookを使ってほぼ目的を達成出来たので,同様の手段で上記の実現が出来ないか模索してみました.

結果的にはAutoHotkeyというソフトを用いることでほぼ満足の行く設定が出来ました.

AutoHotkeyはホットキーへの機能の割り当てを行うスクリプトエンジンだそうで,かなり高機能でいろいろなことができるようです.

AutoHotkeyの設定の仕方などはほかにも色々説明が詳しいサイトがあるので,ここでは必要最低限のことだけにします.

AutoHotkey Wiki や AutoHotkeyを流行らせるページ ミラーページ が詳しいようです.

まず公式ページからAutoHotkey_L_Install.exeをダウンロードしてインストールを行います.

AutoHotkye Wikiページによると,

AutoHotkeyをインストーラーでインストールすると、拡張子 .ahkのファイルに関連付けが行われ、拡張子 .ahkのスクリプトファイルをエクスプローラでダブルクリックしたときなどにAutoHotkey.exeで実行されるようになる。

ということだそうで,拡張子.ahkのスクリプトファイルにキーの割り当て変更などの設定を書き込んで実行させる形式です.

Emacs上でドル記号を入力した際に,IMEをオフにしてドル記号を入力するような設定ファイルを作成しました.

;-----------------------------------------------------------
; IMEの状態をセット
;   SetSts          1:ON / 0:OFF
;   WinTitle="A"    対象Window
;   戻り値          0:成功 / 0以外:失敗
;-----------------------------------------------------------
IME_SET(SetSts, WinTitle="A")    {
 ControlGet,hwnd,HWND,,,%WinTitle%
 if (WinActive(WinTitle)) {
  ptrSize := !A_PtrSize ? 4 : A_PtrSize
     VarSetCapacity(stGTI, cbSize:=4+4+(PtrSize*6)+16, 0)
     NumPut(cbSize, stGTI,  0, "UInt")   ; DWORD   cbSize;
  hwnd := DllCall("GetGUIThreadInfo", Uint,0, Uint,&stGTI)
              ? NumGet(stGTI,8+PtrSize,"UInt") : hwnd
 }

    return DllCall("SendMessage"
          , UInt, DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hwnd)
          , UInt, 0x0283  ;Message : WM_IME_CONTROL
          ,  Int, 0x006   ;wParam  : IMC_SETOPENSTATUS
          ,  Int, SetSts) ;lParam  : 0 or 1
}


#IfWinActive ahk_class Emacs
$::
IME_SET(0)
Send,$
return
#IfWinActive

#IfWinActiveで囲んだ部分はemacsのウィンドウがアクティブな状況でのみ働くようにする設定で,ahk_classというものを特定しておかなければならないのですが,これはAutoIt3 Window Spyを起動してahk_classの知りたいアプリケーションをアクティブにすれば表示されます.これを例えばemacs_insert_dollar.ahktという名前で保存し,Convert .ahk to .exeという実行ファイルを起動してこのahkファイルを処理するとemacs_insert_dollar.exeという実行ファイルが作成されます.これをスタートアップフォルダに移すなどして,起動時に実行されるようにすれば,Emacsウィンドウをアクティブにしている場合にのみドル記号が直接入力されます.

IME_SETという関数はeamat@Cabinetで配布されているIME20121110.zip内のIME.ahkに記述されています.IME.ahkはIMEを制御する関数が色々定義されているようです.

これでほぼ望みどおりの環境を整えることが出来ました.
しかしplatexの実行速度については仮想マシン上のUbuntuとあまり変わらないかもしれません.

Windows 8にTeX環境を構築(1)

追記:2015/01/19 この記事は古いため現在は同じ手順で環境を作ることはできません。特にMinGWのインストールはディレクトリ構成が変わっているようなのでご注意ください。

先日東芝のdynabook v713というデタッチャブル ウルトラブックを購入しました.電磁誘導式のデジタイザ付きで,onenoteで手書きノートを作成する目的で利用しています.

手書きノートを整理してTeX文書化するために,VMWare Playerをインストールして仮想Ubuntu 13.04環境を作り,そこでTeXLive2013をインストールすることでTeX環境を作っていました.

v713は直販以外ではSSDの容量が128GBしかなく,Ubuntu 13.04の仮想ディスクが10GB以上の容量を占めているのがどうももったいない気がしたのと,持ち歩く際に仮想環境ではバッテリーの持ちも悪くなるのではないかという懸念からWindowsネイティブなTeX環境を作ることを模索してみました.

以前にCygwin+TeXLiveの環境を作ってみたのですが,実行速度が遅すぎて使いものにならない印象でした.このTeXLiveはCygwinのリポジトリからインストールしたものだったので,TeXLiveのDVDから直接インストールし,コマンドプロンプトから実行すれば速度が改善されるのではないかと思い試してみることにしました.

結果としてやったことは
  • TeXLive2013のインストール
  • MinGWのインストール
  • NTEmacs23.4のインストール
  • AutoHotkeyをインストールしてEmacs上でドル記号の直接入力設定
です.以下でそれぞれについて述べていきます.LinuxやMac OSX上でTeX環境を作っているものの,Windowsマシンでは同様の環境が作りづらいと感じている人の参考になればと思います.

TeXLive2013のインストール

TeXLiveについては,isoファイルのダウンロードページからtexlive2013-20130530.isoをダウンロードし,仮想ディスク作成ソフト Daemon Tools Liteを使って仮想ディスクにマウントします.
マウント時にinstall-tl.batを起動するかを尋ねられますが,そのままインストールしようとしたところ,Perl関係のエラーが発生してインストールができませんでした.
そこでTeXLive on Windowsのページの下部にある注意を参考に,コマンドプロンプトから

(texliveのisoをマウントしたドライブのパス)¥install-tl -v

を実行したところ,今度はエラー無くインストールを行うことが出来ました.インストール先はデフォルト通りのC:\texliveとしました.

Windowsのファイルシステムが影響しているのか,LinuxやMacに比べてインストールにかなり時間がかかります.

インストール後,「コントロールパネル」→「システムとセキュリティ」→「システム」と進み,さらに左側にある「システムの詳細設定」を選択し,現れた「システムのプロパティ」ウィンドウ下部の「環境変数」をクリック,ユーザの環境変数の部分にPathが設定されていると思います.値はC:\texlive\2013\bin\win32でした.

他にも,C:\texlive\2013\texmf-dist\web2c\texmf.cnfのshell-escapeコマンドの編集を行うなど,TeXLiveをインストールした際にいつも行う作業をしました.

TeXLiveの更新をしようとしましたが,guiのものしか見つかりませんでした.
ターミナルから実行するにはどうするのでしょうか?


次はMinGWをインストールです.さすがにWindowsのコマンドプロンプトは使い慣れていないので,Cygwinよりも実行速度が速いらしいMinGWを試すことにしました.


MinGWのインストール

まずはMinGWの公式ページからインストーラ mingw-get-inst-20120426.exeをインストールし,実行します.mingwはフルインストールしました.容量は500MBくらいなので,Cygwinのフルインストールに比べればだいぶ軽量です.

環境変数は自動で設定してくれるのか失念してしまいましたが,ホームディレクトリはC:\cygwin64\home\(ユーザ名)に作成されており,ユーザ環境変数HOMEもこのディレクトリに設定されています.

インストール後,コマンドプロンプトからmklink /D コマンドを使ってドロップボックス内に保存しているTeXスタイルファイルフォルダから,MinGWのホームディレクトリにシンボリックリンクを作成します.

mklink /D C:\cygwin64\home\(ユーザ名)\texmf  (Dropboxの対象ディレクトリ)

Linuxのシンボリック作成コマンド ln -s とリンク作成元と作成先の順序が違うので要注意です.

MinGWを使ってTeXのタイプセットを試してみたのですが,TeXLiveの環境変数TEXMFHOMEが機能していないようです.そこでユーザ環境変数TEXMFHOMEを作成し,値を%HOME%\texmfとしました.


MinGWではminttyというターミナルが半透明化可能でカッコ良いという話なので,MinGW shellを起動して,

$ mingw-get update
$ mingw-get install msys-mintty

を実行してminttyをインストールしました.
MinGW shellからminttyを実行して,タスクバーに現れるアイコンを右クリックし,「タスクバーにピン止めする」を選択してタスクバーから実行させようとすると,そのままでは設定ファイル諸々を読み込んでくれないので,Cygwin/minttyからscreenを起動する方法を参考にタスクバーからminttyを実行できるようにしました.

minttyではbashを起動するように設定したのですが,bashの設定ファイル.bashrcをMinGWのホームディレクトリにおいても読み込んでくれないようです.そこで.bash_profileという名前のファイルを作成し,中身に

if [ -f ~/.bashrc ]; then
. ~/.bashrc

fi

を書き込みます..bashrcのほうは

# some more ls aliases
alias l='ls -CF'
alias rm='rm -i'
alias cp='cp -i'
alias ls='ls --color=auto'
alias ll='ls -la --color=auto'
alias la='ls -a --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'

# reftex environment variable
export BIBINPUTS=.:$HOME/texmf/pbibtex/bib//
export INDEXSTYLE=.:$HOME/texmf/makeindex//

という設定をしました.


NTEmacsのインストール

NTEmacsはsourceforgeのgnupackプロジェクトのダウンロードページからemacs-23.4-20120527.exeをダウンロードしました.現時点で最新版は24.2なのですが,emacs24では自分が愛用しているwiden-window.elがうまくはたらかないのでemacs23系列を利用しています.こちらは解凍したディレクトリがそのままインストールディレクトリになるので,私はCドライブ直下に配置し,環境変数のPathにbinディレクトリへのパスを通しました.

gnupackのemacsはIMEパッチ施しているので,MSIMEを使ったインライン入力が可能です.私はGoogle日本語入力を導入していますが,Google日本語入力でははじめからインライン入力が可能なようです.

以下にEmacsの設定ファイル(~/.emacs.d/init.el)を晒しておきます.

;;;; 初期設定ファイルの指定
(setq user-init-file "~/.emacs.d/init.el")

;;; マクロサーチパスの追加
(setq load-path (cons "~/lib/emacs" load-path))


;;; 言語環境の指定
(set-language-environment "Japanese")


;;;エンコーディング設定
(set-default-coding-systems 'utf-8)
(set-buffer-file-coding-system 'utf-8-unix)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
(setq file-name-coding-system 'utf-8)

;;; emacsclient サーバを起動
(server-start)


;;; 起動直後のカレントディレクトリ(find-fileのパス)を~/にする
(cd "~/")

;;複数のバージョンをバックアップとして保存
(setq version-control nil)

;; 最近使ったファイルを記憶させる
;;   使い方は M-x recentf-open-files
;;(recentf-mode 1)
(require 'recentf)
(when (require 'recentf nil t)
  (setq recentf-max-saved-items 100)
  (setq recentf-exclude '(".recentf"))
  (setq recentf-auto-cleanup 20)
  (setq recentf-auto-save-timer
        (run-with-idle-timer 30 t 'recentf-save-list))
  (recentf-mode 1))

(global-set-key "\C-xf" 'recentf-open-files) ;;履歴一覧を開く。


;;; IME の設定 
(setq default-input-method "W32-IME")
(w32-ime-initialize)
(setq-default w32-ime-mode-line-state-indicator "[Aa]") 
(setq w32-ime-mode-line-state-indicator-list '("[Aa]" "[あ]" "[Aa]")) 


;;; IME ON/OFF 時にカーソル色を変える。
(add-hook 'w32-ime-on-hook
          (lambda () (set-cursor-color "red")))
(add-hook 'w32-ime-off-hook
          (lambda () (set-cursor-color "white")))





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Emacs のフォント/カラー設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq default-frame-alist 
      (append
       '((width . 80) (height . 29) 
  (top . 0) (left . 300);; ウィンドウサイズ
  )
       default-frame-alist)) 

(set-face-background 'default "#333366") ;; 標準の背景色
(set-face-foreground 'default "white")   ;; 標準の文字色

(setq load-path (cons "~/lib/emacs/color-theme-6.6.0" load-path))
(require 'color-theme) ;; color-theme.elを使う
(color-theme-initialize)
(color-theme-taylor)
;; デフォルトの透明度を設定する (85%)
(add-to-list 'default-frame-alist '(alpha . 80))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ウィンドウ関係
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; widen-window フォーカスのある window のサイズが自動的に大きくなる
(require 'widen-window)
(global-widen-window-mode 1)
(setq ww-ratio 0.7)
 ;window widening が機能してほしいタイミングを追加
(setq ww-advised-functions
      (append ww-advised-functions
       '(;recenter
  windmove-up
  windmove-down
  windmove-right
  windmove-left)))


 ;;; メニューバーを消す
 (menu-bar-mode nil)
 ;;; ツールバーを消す
 (tool-bar-mode -1)

 ;; 起動時の画面はいらない
 (setq inhibit-startup-message t)

 ;;;対応する括弧をハイライトする
 (show-paren-mode t)

  ;;片方の括弧が画面外にあるときのための設定
 (setq show-paren-style 'mixed)
 (set-face-background 'show-paren-match-face "gray10")
 (set-face-foreground 'show-paren-match-face "SkyBlue")


 ;;;対応する括弧へ飛ぶ (Ctrl-x %)
(progn
  (defvar com-point nil
    "Remember com point as a marker. \(buffer specific\)")
  (set-default 'com-point (make-marker))
  (defun getcom (arg)
    "Get com part of prefix-argument ARG."
    (cond ((null arg) nil)
          ((consp arg) (cdr arg))
          (t nil)))
  (defun paren-match (arg)
    "Go to the matching parenthesis."
    (interactive "P")
    (let ((com (getcom arg)))
      (if (numberp arg)
          (if (or (> arg 99) (< arg 1))
              (error "Prefix must be between 1 and 99.")
            (goto-char
             (if (> (point-max) 80000)
                 (* (/ (point-max) 100) arg)
               (/ (* (point-max) arg) 100)))
            (back-to-indentation))
        (cond ((looking-at "[\(\[{]")
               (if com (move-marker com-point (point)))
               (forward-sexp 1)
               (if com
                   (paren-match nil com)
                 (backward-char)))
              ((looking-at "[])]}")
               (forward-char)
               (if com (move-marker com-point (point)))
               (backward-sexp 1)
               (if com (paren-match nil com)))
              (t (error ""))))))
  (define-key ctl-x-map "%" 'paren-match))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; タブ、全角スペースを表示する
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defface my-face-r-1 '((t (:background "gray15"))) nil)
(defface my-face-b-1 '((t (:background "gray"))) nil)
(defface my-face-b-2 '((t (:background "gray26"))) nil)
(defface my-face-u-1 '((t (:foreground "red" :underline t))) nil)
(defvar my-face-r-1 'my-face-r-1)
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)
(defadvice font-lock-mode (before my-font-lock-mode())
  (font-lock-add-keywords
   major-mode
   '(
     ("\t" 0 my-face-b-2 append)
     (" " 0 my-face-b-2 append)
     ("[ \t]+$" 0 my-face-u-1 append)
     (" [\r]*\n" 0 my-face-r-1 append)
     )))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 編集行を目立たせる(現在行をハイライト表示する)
;;;;;;;;;p;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defface hlline-face
  '((((class color)
      (background dark))
     (:background "dark slate gray"))
    (((class color)
      (background light))
;     (:background "ForestGreen"))
     (:background "Skyblue"))
    (t
     ()))
  "*Face used by hl-line.")
(setq hl-line-face 'hlline-face)
;; (setq hl-line-face 'underline) ; 下線
(global-hl-line-mode)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;バッファ移動を直感的にShift + ↓ or → or ← or ↑で行う
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq windmove-wrap-around t)
(windmove-default-keybindings)
;;Control + Shift + ↓ or → or ← or ↑でバッファ間移動
;; (global-set-key [?\C-\S-f] 'windmove-left)
;; (global-set-key [?\C-\S-b] 'windmove-right)
;; (global-set-key [?\C-\S-p] 'windmove-up)
;; (global-set-key [?\C-\S-n] 'windmove-down)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;; TeX-master は安全な局所変数として扱う
;;; from AUCTeX tex.el 
(put 'TeX-master 'safe-local-variable
     (lambda (x)
       (or (stringp x)
    (member x (quote (t nil shared dwim))))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; YaTeX 1.77
;;   [La]TeX 入力モード
;;   M-x yatex とするか、.tex で終わるファイルを読み込むと起動します
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq load-path (cons "~/lib/emacs/yatex1.77" load-path))

(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)

;; ローカル辞書(あるディレクトリのみで有効なコマンドを保存する)を使わない
(setq YaTeX-nervous nil)

;; *YaTeX-typesetting* のバッファーが文字化けしないようにする
(setq YaTeX-latex-message-code 'utf-8)

;;タイプセットの自動rerunを無効化
(setq YaTeX-typeset-auto-rerun nil)

;;コマンドの引数をミニバッファで入力しない
(setq YaTeX-skip-default-reader t)

;;usepackageの挿入提案を出さないようにする
(defun YaTeX-package-auto-usepackage (macro type) nil)

;; YaTeX-mode
(setq auto-mode-alist
      (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist))
(setq 
       dvi2-command "rundll32 shell32,ShellExec_RunDLL SumatraPDF -reuse-instance"
      tex-command "platex -kanji=utf8 -shell-restricted -synctex=1"
      dvipdf-command "dvipdfmx"
      bibtex-command "pbibtex -kanji=utf8"
      makeindex-command "mendex -U"
      YaTeX-kanji-code 4) ;kanji-code 3: euc-jp, 4: utf-8


;; AMSTeXを使う
(setq YaTeX-use-AMS-LaTeX t)


;;YaTeX カスタマイズ
(setq yatex-mode-load-hook
      '(lambda()
  (YaTeX-define-begend-key "bP" "proof")
  (YaTeX-define-begend-key "ba" "align")
  (YaTeX-define-begend-key "bg" "gather")
  (YaTeX-define-begend-key "bf" "figure")
  ))


;;数式記号の個人設定
(setq
 YaTeX-math-sign-alist-private
 '(
   ("sc"        "mathscr"       "\\mathscr{}")
   ("Q"         "mathbb{Q}"     "|Q")
   ("C"         "mathbb{C}"     "|C")
   ("H"         "mathbb{H}"     "|H")
   ("Z"         "mathbb{Z}"     "ZZ")
   ("N"         "mathbb{N}"     "|N")
   ("R"         "mathbb{R}"     "|R")
   ("K"         "mathbb{K}"     "|K")
   ("lan"       "langle"        "<")
   ("ran"       "rangle"        ">")
   ("ds"        "displaystyle"  "displaystyle")
   ("tx"        "textstyle"  "textstyle")
   ("q"         "quad"          "__")
   ("qq"        "qquad"         "____")
   ("ls"        "varlimsup"     "___\nlim")
   ("li"        "varliminf"     "lim\n---")
   ("il"        "varinjlim"     "lim\n-->")
   ("st"        "text{ s.~t. }" "s.t.")
   ("bigop"     "bigoplus"      "_\n(+)~")
   ("bigot"     "bigotimes"     "_\n(x)\n ~")
   ("pl"        "varprojlim"    "lim\n<-- 1="" 40="" 41="" 91="" 93="" add-hook="" alt="" atex-font-lock-recenter="" atex-visit-main="" atex="" buffer-file-name="" buffer-name="" c="" concat="" cond="" control="" count-lines="" define-key="" defun="" efine="" eftex-mode="" enable-local-variables="" expand-file-name="" f="" file-name-sans-extension="" following-char="" forward-search="" forward="" fwdsumatrapdf-forward-search="" fwdsumatrapdf="" hellexec_rundll="" interactive="" j="" kbd="" key="" lambda="" local-set-key="" mytex-jump-to-next="" n="" nil="" number-to-string="" or="" pdf="" point-min="" point="" process-kill-without-query="" progn="" reftex-insert-label-flags="" reftex-mode-map="" reftex-mode="" reftex="" reuse-instance="" rundll32="" s="" save-excursion="" save-restriction="" search="" setq-default="" setq="" sfte="" shell32="" skip-chars-forward="" start-process="" sumatra="" sumatrapdf-forward-search="" sumatrapdf="" synctex="" t="" table="" tex-master="" tex-parse-self="" turn-on-reftex="" umatrapdf="" widen="" yatex-mode-hook="" yatex-mode-map="" yatex-mode="" yatex-parent-file="" yatex-prefix="" yatex.el="" yatex="" ytex-jump-to-next="">") 'YaTeX-comment-region) ;指定領域のコメントアウト "C-c >"
       (define-key reftex-mode-map
  (concat YaTeX-prefix "<") 'YaTeX-uncomment-region) ;コメントアウト解除 "C-c <"
       (define-key reftex-mode-map
  (concat YaTeX-prefix ")") 'YaTeX-insert-parens-region) ;領域を括弧で括る "C-c )"
       ))

;; 上でYaTeXに譲り渡したRefTeXのコマンドを定義し直す
;;;;; labelの参照のコマンドを"C-c )"から"C-h )"に変更(暫定的)
(add-hook 'reftex-mode-hook
    '(lambda ()
      (define-key reftex-mode-map "\C-h)" 'reftex-reference)
      (define-key reftex-mode-map "\C-h=" 'reftex-toc)
      (define-key reftex-mode-map "\C-h(" 'reftex-label)
      (define-key reftex-mode-map "\C-h[" 'reftex-citation)
      (define-key reftex-mode-map "\C-h<" 'reftex-index)
      (define-key reftex-mode-map "\C-h>" 'reftex-display-index)
      (define-key reftex-mode-map "\C-h/" 'reftex-index-selection-or-word)
      (define-key reftex-mode-map "\C-h\\" 'reftex-index-phrase-selection-or-word)
      (define-key reftex-mode-map "\C-h|" 'reftex-index-visit-phrases-buffer)
      (define-key reftex-mode-map "\C-h&" 'reftex-view-crossref)
        ))

;;;

;;; C-h&でhyperlink, hypertarget間の相互ジャンプを可能にする

(setq reftex-view-crossref-extra
      '(("\hyperlink" "\hypertarget{\\(%s\\)}" 1)
 ("\hypertarget" "\hyperlink{\\(%s\\)}" 1)))


;;; 新たなlabel環境の定義

;; \eqrefを使う
 (setq reftex-label-alist 
       '(
  (nil ?e nil "\\eqref{%s}" nil nil)
  ("theo"  ?h "theo:"  "\\ref{%s}" t ("定理"))
  ("axiom"  ?a "axiom:"  "\\ref{%s}" t ("公理"))
  ("prop"  ?p "prop:"  "\\ref{%s}" nil ("命題"))
  ("lem"   ?l "lem:"   "\\ref{%s}" nil ("補題"))
  ("defi"  ?d "defi:"   "\\ref{%s}" nil ("定義"))
  ("coro"  ?c "coro:"   "\\ref{%s}" nil ("系"))
  ("exercise"  ?x "exercise:"   "\\ref{%s}" nil ("問"))
  ))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Asymptote モード
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq load-path (cons "~/lib/emacs/asymptote" load-path))
(autoload 'asy-mode "asy-mode.el" "Asymptote major mode." t)
(autoload 'lasy-mode "asy-mode.el" "hybrid Asymptote/Latex major mode." t)
(autoload 'asy-insinuate-latex "asy-mode.el" "Asymptote insinuate LaTeX." t)
(add-to-list 'auto-mode-alist '("\\.asy$" . asy-mode))
(add-hook 'asy-mode-hook (lambda () (local-set-key [f5] 'asy-compile)))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; その他の設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; 一行が 80 字以上になった時には自動改行する
(setq fill-column 80)
(setq text-mode-hook 'turn-on-auto-fill)
(setq default-major-mode 'text-mode)

;;; ステータスラインに時間を表示する
(setq dayname-j-alist
      '(("Sun" . "日") ("Mon" . "月") ("Tue" . "火") ("Wed" . "水")
 ("Thu" . "木") ("Fri" . "金") ("Sat" . "土")))
(setq display-time-string-forms
      '(
;(format "%s年%s月%s日(%s) %s:%s %s"
;                     year month day
 (format "%s/%s(%s) %s:%s %s"
  month day
  (cdr (assoc dayname dayname-j-alist))
  24-hours minutes
  load)))
(display-time)

;;; visible-bell
(setq visible-bell t)

;;; 行番号を表示する
(line-number-mode t)

;;; バッファの最後でnewlineで新規行を追加するのを禁止する
(setq next-line-add-newlines nil)


;;; mark 領域に色付け
(setq transient-mark-mode t)

;;; 最終更新日の自動挿入
;;;   ファイルの先頭から 8 行以内に Time-stamp: <> または
;;;   Time-stamp: " " と書いてあれば、セーブ時に自動的に日付が挿入されます
(if (not (memq 'time-stamp write-file-hooks))
    (setq write-file-hooks
          (cons 'time-stamp write-file-hooks)))


Emacsの設定では,フルスクリーンの設定が未だにうまくいっていません.
フルスクリーンというよりも全画面表示的なものであったり,タスクバーの背後に画面が隠れてしまうなどするので,まだ決定的な設定が見つけられていません.

これでほぼUbuntuやMacと同じ環境を整えることが出来ました.
これまでWindowでTeX環境を作らなかった理由の1つとして,EmacsでYaTeXを用いている際に,日本語入力の状態でもドル記号を入力すると自動で数式入力モードに切り替わる機能が使えるように設定できないことがありました.

それについても記載したいと思いますが,大分長いエントリになってしまったのでそれは別のエントリに分けたいと思います.

2013年8月9日金曜日

enchantmoonをキャンセルしてdynabook v713を買いました.

enchantmoonの予約開始当日に注文し,7月末まで買う気満々でした.
液晶の保護フィルムや,ケース,デジタイザ用の単6電池まで購入して待ちわびておりました.
しかし出荷の遅れ,手書きも快適に行うことが出来ないというレビューを多く見たこと,
東芝が手書きに力を入れた製品を出したという情報を見かけたのをきっかけにenchantmoonの購入を取りやめて,評判のよかった東芝のdynabook v713を購入しました.予約はアスキーストアさんからでしたが,配送の遅延を理由にキャンセルを受け付けて頂けました.v713の購入時の価格は120,000円くらいなので,enchantmoonの価格の3倍です(汗).注文の翌日に届きました.

元々enchantmoonに興味を持っていたのは手書きのレスポンスが良いという情報だけであったので,enchant.jsなどのプログラミングの機能についての興味は無く,手書きの快適さについての情報が怪しくなった時点で興味を失いつつありました.twitterなどを見ていると,次第にレスポンスが改善されていっているようで,次回があるならば検討してみたいと思います.

キャンセルをした直後は,代わりにREGZAタブレットを購入しようかとも思ったのですが,androidタブレットであることが気にかかってしまい,いっその事初のwindows8機に手を出してしまえと思ったのでした.

結果からいうと,v713は買ってよかったと思える,満足のいく製品です(キーボードを除く).
これまでipad+7notesに始まり,asusのeee note ea 800やwacom inkling, ipad+ipenやシャープの電子ノートwg-n10などを購入してはその度に失望してきましたが,ようやく満足のいくものに出会う事が出来ました.dynabook v713は上記のものと比べると雲泥の差があります.

現在はプリインストールされているone noteを中心に使っています.デジタイザペンの先端が画面に近づくとタッチ操作を受け付けなくなり,手のひらを付けて文字を書く事ができます.描画の遅延もほとんど気にならず,ペンと画面の摩擦も程よく,固いペンで堅い画面にカツカツ書くという感じではありません.wacom feel it technologiesを搭載しているので,eee note ea800のペンが使えるのですが,こちらはツルツルカツカツして書き心地があまりよくありませんでした.またbamboo stylus feelを購入して使ってみたものの,摩擦の加減やペンの重さでは付属のペンの方が使い易い印象です.安っぽいですが.bamboo stylus feelは消しゴム機能が無いので使い辛く,ほとんど使用していません.

note anytimeがキャンペーン価格だったので購入してみたのですが,こちらはタッチ操作のために作られたアプリであり,パームリジェクション機能がないためかなり使い辛く感じました.ipadでjot proを使って書いている感覚に近いかも知れません.しかし描画の速度はipad (3rd)よりも早く,インターフェイスもone noteよりも使い易いので,パームリジェクション機能さえあれば移行したいところです.(one noteには,デスクトップ用のものとwindowsストアアプリ版があり,windowsストアアプリ版のインターフェイスの方がnote anytimeに近く使い易く感じます)

webのいろいろなところでも手書きについては評価が高いようです.私は絵を描かないのでそちらの評価は出来かねますが,文字を描く分には上に挙げたいずれよりも使い易いと思います.またwindowsマシンなので,自炊したpdfファイルや自分でTeX化したノートを眺めながら手書きノートを作るといった作業が出来ることが便利です.




勿論不満点もあるので,ここからしばらくは不満点について書いていきます.
まず第一にいろいろなところで触れられているように,付属のキーボードが使い物になりません.打鍵感は悪くないのですが,ほぼ直角までしか開かないのでかなり猫背の人でないと辛いのではないでしょうか.付属キーボードは取り付けるとusbデバイスとして認識されます.無線接続のキーボードにしなかったのはuefi画面(bios画面)に入れるようにしておくためなのか?しかしもう少しなんとかならなかったのでしょうか.キーボードのせいで価格が1万円,2万円違ってくるのならば,キーボード無しで売ってくれることを懇願したいです.

付属キーボードは使用するとストレスが溜まるので,microsoftのwedge mobile keyboardとwedge touch mouseを買いました.wedge mobile keyboardのカバーはタブレットスタンドにもなり,見た目もかっこ良くで満足しています.キーが固く,打ち辛さはありますが慣れが解消してくれるでしょう.

第2の不満点は,これも他所でも言われていることですが,必要のない抱き合わせソフトがテンコ盛りであることです.photoshop elementsは使わずとも有り難みを感じますが,128GBのSSDでユーザが使用出来る領域が数十GBしか残っていないのに,動画編集なんぞに使う人がいるんでしょうか.直販でなければSSDの増設が出来ないのも辛いですね.

第3は許容範囲ですが,wacom feel it technologiesを搭載しているものに共通して,画面の端でのペンの精度が悪い点が挙げられます.全画面表示でアプリケーションを使っていると,画面端にタスクバーやらメニューやらがくることが多いのですが,ペンで操作しようとすると位置がずれて思いがけないところをクリックしてしまうことがままあります.wacomさんに頑張って欲しいところです.

またそこそこ大きく,キーボードを外した状態でMacbook Air 11インチと同じくらいの大きさがあります.持ち運びは面倒かもしれません.

あと,負荷をかけるとファンがすごくうるさいです.普段Macbook Airを使っていると,ファンが鳴るのはCPUの使用率が以上に高い場合などに限られるので,ファンが鳴っただけでも心配してしまいます.それに比べると,動画を閲覧したりしているだけでかなり大きな音を出してファンがまわり出すので少し不快です.



その他には外部ストレージとしてsilicon powerの32GB USBメモリSonyの8GBのUSBメモリ,Lexaの64GBのSDXCカードを使って見たのですが,数GBのファイルの読み出しと書き込みを同時に行うと8割くらいの確率でフリーズします.これらが全部欠陥品とは思えないので,v713のほうに何か問題があるのではと勘ぐってしまいます.
最初はSDカードにubuntuを入れて,マルチブートが出来ればいいなと考えていたのですが,外部ストレージの読み書きが余り安定しないのと,そもそもuefiの設定画面を見てもSDカードから起動できないっぽいことと,マルチブート環境を構築したのが遠い昔なので現在風のやり方がよくわからないことから早々に挫折しました.


今はなけなしの内部ストレージにVMware Playerをインストールし,仮想のUbuntu 13.04をインストールしてTeX環境を作っています.cygwinも入れてみたのですが,platexのタイプセットが仮想マシン上のUbuntuの動作よりも遅く残念な感じでした.W32TeXは使ったことが無いのですが(角藤さんごめんなさい),windowsマシンを使っている人はTeXLiveを使うよりもやっぱりW32TeX派が多いのでしょうか?
しかし仮想マシン上でも数年前に買ったacerのculvノートよりもタイプセットが早いので,出先でTeXの原稿打ちをすることになった場合にはそこそこ使えそうです.

今はone noteで手書きのノートを作り,それを見ながらUbuntu上でTeX打ちをしたり,Dropbox上に手書きの原稿をpdfとしてエクスポートしたものを眺めながら,もしくはone note web app上の原稿をブラウザで眺めながら,Macbook AirでTeX打ちをしています.

価格コムの口コミを見ると厳しい評価が多いのですが,内容を見ると,ノートパソコンとして使うことを主体としている人が酷評しているようです.手書きノートを電子化する目的であれば,dynabook v713はかなりおすすめです.

ipen2にもかなり期待をしているので,あちらも使い勝手がよければいいなー.