otfパッケージでゴシックとボールドゴシックを使い分ける

以前

alainp.hatenablog.com

という記事を投稿したが、より良い(と思われる)方法がわかったのでまとめておく。

今までの方法では、セクションの見出し等は良い感じになるのだが、文字を強調したいときには細いゴシックのままであり少々目立ちにくかった。

結局何が問題だったのかというと、ゴシック体とボールドゴシック体が区別されていないのが問題だったのである。どういうことかというと、デフォルトのままでは

\textgt{\textbf{}}
\textgt{}

は両方ヒラギノ角ゴW6になってしまう。 つまり両方太字のゴシックになってしまうのである。 しかし、見出しの英字等はただのサンセリフ体であるから、そこで太さの釣り合いが取れず、不自然に感じてしまうのである。 これを解決するためには、otfパッケージを用いれば良い。

otfパッケージを用いれば、より多くの書体を使い分けることができる。 使うためには

\usepackage[deluxe]{otf}

とプリアンブルに書くだけで十分である。 uplatexの場合はuplatexオプションもつける。 こうすれば、次はすべて区別されるようになる(あとでスクリーンショットを貼る予定)。

あいうえお
\textgt{あいうえお}
\textbf{あいうえお}
\textgt{\textbf{あいうえお}}

ただしこのままではamsthmなどの定理環境を用いるとき、"定理1.1"などの文字が明朝のボールド体になってしまう。 好みの問題だが、私はゴシック体の方が好きである。 これを解決するためには、以前にも紹介したthmtoolsを使えば良い。

\usepackage{amsthm}
\usepackage{thmtools}
\declaretheoremstyle[
  spaceabove=6pt, spacebelow=6pt,
  headfont=\bfseries\sffamily,
  notefont=\bfseries\sffamily,
  notebraces={}{},
  postheadspace=1em
]{definition}
\declaretheorem[title=定理, style=definition, parent=section]{theorem}

とすれば、英字部分もサンセリフのボールドになってさらに統一感が出る。 thmtoolsについてはまた書くかもしれない。

VimでLaTeXの\[\]の置換

LaTeXを書いていると、頻繁に

\[
  ...
\]

\begin{equation}
  ...
\end{equation}

に書き換えたいときが出てきます。

Vimの置換なら、

:s/\v(\_.{-})\\\[(\_.{-})\\]/\1\\begin\{equation\}\2\\end\{equation\}/

でできます。 これなら、▮をカーソルとすれば、

▮...
...
\[
  ...
  ...
\]

みたいなときでも置換できます。 つまりカーソルの後で一番最初にある\[\]を置換します。

nnoremap <silent> <Space>e :s/\v(\_.{-})\\\[(\_.{-})\\]/\1\\begin\{equation\}\2\\end\{equation\}/<CR>:noh<CR>

みたいにmappingしておくと便利です。

それでは。

zshの関数とxargs

zshの関数(functionで定義するやつ)とxargsを組み合わせようとしたところ、うまく行かずに困ってしまいました。 bashなら方法はあるらしいのですが、zshでこれをやろうとしても、うまくいきません。

d.hatena.ne.jp stackoverflow.com

bashではexport -fというものを使うのですが、どうやらこれはzshにはないらしい。

unix.stackexchange.com

というわけで、結局zshでは関数とxargsを組み合わせることはできないようですね。 私は素直にシェルスクリプトに変えることで対応しました。

参考になれば、ということで。

コマンドライン引数を標準入力として扱う

タイトルでは何のことだかわかりませんね。 たまに、標準入力しか受け付けてくれないプログラムってありますよね。 でもコマンドライン引数と違って、標準入力だと補完を受け付けてくれなかったり、いろいろ不便なことも多いですよね。

そんなときはどうすればいいか。 例えばexampleというコマンドが標準入力を受け付けるなら、

echo 'なんとか' | example

と、echoとパイプを使えばいいようです。 あとはシェル関数とかを使って'なんとか'の部分を引数にしてあげれば、コマンドライン引数として扱えます。

自分でプログラミングをしていて、テストする時に毎回同じ引数を与えたい、なんてときにも使えるテクニックですね。

日本語LaTeXでamsthmのproof環境をなんとかする

2016/2/23 修正 \blacksquareを$で囲みました

最近積極的に更新しています。

今回は、amsthmのproof環境についてです。 \usepackage{amsthm}すると勝手に定義されるこいつですが、なかなかカスタマイズがしづらくて厄介です。

デフォルトでは、italic体のProof.から始まり白抜きの四角のQEDマークで終わります。 これを証明.に変えるには、

\renewcommand{\proofname}{\bf{証明}}

で、もしもQEDを黒い四角に変えたいなら、

\renewcommand{\qedsymbol}{$\blacksquare$}

とすればできます。ここまではよく知られています。

しかしこの方法では、証明.のドットがitalicで残ってしまいます。 気になる方も中にはいるでしょう。 これを変えるのは大変です。 例えば

tex.stackexchange.com

には、\makeatletterとかいうよくわからないものを使った解決法が載っています。 しかしこんなよくわからないものは使いたくない、ということで、thmtoolsを使った解決法を思いつきました。

私の方法はこうです。

% proofの再定義
\declaretheoremstyle[
  spaceabove=6pt, spacebelow=6pt,
  headfont=\bfseries\sffamily,
  notefont=\bfseries\sffamily,
  notebraces={}{},
  postheadspace=1em,
  numbered=no,
  qed=$\blacksquare$
]{myproof}
\declaretheorem[title=証明, style=myproof]{myproof}
\renewenvironment{proof}{\begin{myproof}}{\end{myproof}}

(2016/2/23 pTeX系で動かなかったため更新)

新しくmyproof環境を定義して、proofをそれで置き換えています。 この方法の利点は、シンプルで、かつカスタマイズもしやすいことです。 headfontやnotefontは、お好みで\bfseriesだけにしてもいいでしょう。 詳しくはthmtoolsのドキュメントを参照のこと。

というわけで、皆さんthmtoolsを使いましょう。

LaTeXでベクトルなどに用いる\bm

LaTeXでベクトルを太字表記したい時、bm, mathbf, boldmathなどいくつかの方法があります。 どれを使うべきなのでしょうか。

結論から言えば、bmを使うのがオススメです。\usepackage{bm}と書いておけば、\bm{x}などという風に使えます。 このとき、\usepackage{bm}は、\usepackage{newtxmath}など数式フォントを変えるパッケージよりに書いておく必要があります。 こうしないと、後述する不具合が起きます。
一応他のものも見ておきますと、\mathbfは使うとRoman体(斜体じゃない奴)の太字になってしまうため、あまり好まれないでしょう。 また、boldmathを使うのは面倒で、あまりメリットはないでしょう。

なお調べると、

d.hatena.ne.jp

のような記事が出てきますが、ここにはbmは良くないと書かれています。 しかし、これは数式フォントを変えるパッケージよりにbmを読み込んでいると起きる問題です。 前述したように、それよりに書いておけば、何の問題もありません。

ためらわずにbmを使いましょう。

vimtexの自動タイプセットが止まらない

前の記事では、 vimtexを紹介しました。

vimtexにほとんど不満はないのですが、唯一問題なのが、 自動タイプセットがVimを閉じたあとも動き続けてしまうことがある、ということです。
vimtexでは'll'でタイプセットが開始し、以後ファイルに変更があれば勝手にタイプセットを行ってくれます。 しかし、この状態で':q'などで終了すると、このプロセスだけが残り続けてしまうことがあります。 いつでもなるわけではなく、再現条件は良く分かりません。

対処法です。

ps aux | grep latex

とすれば、それらしきプロセスが見つかるので、killすればおしまいです。

ps aux | grep latex | grep VIM

とかしておけば、さらに絞り込めます。 あとは、pgrepやpkillなんかも使えます。

pgrep -f latex

とすれば、上の結果のPIDだけが表示されます。 もしこの結果が目的のものだけなら、

pkill -9 -f latex

でkillできます。 他のも混じっていたら、あきらめてPIDを指定してkillしましょう。

以上です。