keyhacが重い

keyhacを使っていると、ウインドウ立ち上げ直後などに結構長時間フリーズが生じてしまうようです。これが結構ストレス。

Karabiner-Elementsでも対応してくれればいいのですが、見ている限りまだっぽい…。待つしかなさそうです。Pull Requestを送れるくらい技術力があればいいのだけれど。

BrissでPDFの読み込みが失敗するときの対処

スマホ電子書籍リーダーで読むために、PDFの余白を切り取ろうとした話です。 Brissを使えば良いことは調べればすぐに分かったのですが、相性とかでやたらと時間がかかったのでメモしておきます。

どういう状況だったかというと、PDFを読ませても真っ黒な画面しか出てきませんでした。コマンドライン側でも何やらエラーを吐いていました。BrissのREADMEには、PDFのファイルサイズが大きい場合には java -Xms128m -Xmx1024m -jar briss-0.9.jarを使えと書いてありますが、これも上手くいきませんでした。

結論から言うと、pdfjamに食わせることで解消しました。pdfjamは、主にページの抜き出しや結合等を行えるコマンドラインツールです。何もオプションを指定せずに

pdfjam input.pdf

とすれば、全く同じ内容のPDF"input-pdfjam.pdf"が作成されます。こちらをBrissに食わせることで、今度は問題なく余白を切り取ることができました。

その他

pdfjamは内部でpdflatexを使用するので、TeX環境が必要なことに注意が必要です。

同じようなことができるqpdfはBrissと相性が悪いようで、こちらが出力したものは受け付けてくれませんでした。 嘘だったので訂正。qpdfがダメなのではなく、元のPDFに問題があるだけだった。pdfjamはLaTeXを介して変換するので、その過程でいい感じにしてくれるらしい。

他にPDFの余白切り取りのようなことができるツールとしては、k2pdfoptもあります。こちらはもう少し高機能で、Kindle用に読みやすくレイアウト変更などもしてくれます。もしも切り取りだけしたいなら、出てくるメニューでmoと入れて、cropを選べば同じようなことができます。ただしこちらは1ページごとに余白を切り取るため、ページ毎にサイズが変わってしまうのが難しいところです。

macOS SierraでVimの日本語入力を快適に

Vimを使っている人は、Escでインサートモードを抜けたとき、日本語入力を解除して欲しくなると思います。 El CapitanまではKarabiner(旧KeyRemap4MacBook)が使えたため、 m.designbits.jp で上手いことできていたのですが、SierraになってKarabinerが動かなくなってしまったため、この方法が使えなくなってしまいました。 Sierra用にはKarabiner-Elementsが開発中ですが、どうやら一つのキーに複数のキーシークエンスを設定するような機能は未実装のようです。 (参考:Mapping a key to a sequence of keys · Issue #347 · tekezo/Karabiner-Elements · GitHub)

そこでKeyhacというツールを使用して、やりたいことを実現できたので、その設定を書いておきます。

Keyhac - Pythonによる柔軟なキーカスタマイズツール - craftware

KeyhacのMacVim用設定ファイル

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

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