2019年12月2日月曜日

VS Code で LaTeX の執筆環境を整える

Sublime Text の台頭から始まった第2次エディタ戦争も Visual Studio Code (以下 VS Code)に収束した感があるので,学生さんにも LaTeX な原稿を VS Code で執筆することをお勧めしています.
しかし,なんか微妙なビルド環境になっていることが多いので,お勧めのパターンをメモしておきます.

※ TeX一式と VS Code がインストールされていることが前提です.TeXについては TeX Live をネットワーク経由でインストールするのがお勧めです.ミラーサーバーの引きが悪いと一向に作業がすすまないことがあるので,その時は中断してやり直すか,上記ページの説明をよく読んだ方がいいです.

LaTeX Workshop を入れる

インストール

LaTeX 原稿のビルドやプレビュー,入力補完などを行うための Extension
を入れます.VS Code をインストールした状態であれば上のリンク先で Install のボタンをクリックすればインストールできると思います.

ビルドの設定

LaTeX Workshop は色々な手順・方法でのビルドに対応しています.
文書ごとに設定ファイル latexmkrc (先頭にドットは付かない・拡張子もつかない)を作成し,Latexmk でビルドする方法をお勧めします.
ホームディレクリに .latexmkrc (先頭にドットが付く) を置いて全ての文書でもその設定を使うやり方もありますが,お勧めしません.
余分な dvipdfmx の呼び出しが避けられなくなるので ptex2pdf を使うのもお勧めしません.
この方法のメリットは
  • BiBTeX を使っている場合(普通はそうしたほうが良いです),効率が良く正しい手順は面倒で間違いやすいが,Latexmk にお任せすればうまくやってくれる
  • 日本語の文書は大抵の場合 pLaTeX でコンパイルする必要がある.
    しかし,pLaTeX のベースは古く,国際会議などのテンプレートに対応できない場合があるので,英語の原稿は pdfLaTeX でビルドするほうが無難である.
    したがってビルド手順は文書ごとに保持するほうが簡単
  • たとえ VS Code を使うのをやめても Latexmk で簡単にビルドできる.
    (Latexmk は20年以上持続的に開発されており,LaTeXの処理系と同程度には将来も使えることが期待できます.エディタはこの20年で3回は乗り換えたので…)
  • 他の人に渡してもビルドが簡単
    (TeX のディストリビューションをインストールすればほとんどの場合 Latexmk は入っています)
ことです.

エディタのビルド設定(settings.json)

まず,LaTeX Workshop がLatexmkを呼んでくれるように下記の内容を settings.json に追記します.settings.json の編集方法はちょいちょい変わっていますが,2019年12月時点ではこの辺の情報が正しいです.


各文書ごとのビルド設定(latexmkrc)

VS Code を使う場合は各文書ごとにフォルダを一つ作るのがおすすめです.
推敲の履歴を残したい場合は hoge_old.tex などを作るのではなく Git を使いましょう.

フォルダの直下にlatexmkrcという名前のファイルを作成します.
日本語の文書の場合は
英語の文書の場合は
のようにすると良いです.

スペルチェッカーを入れる

スペルチェッカーにかけていない原稿を人に見せるのは時間の無駄なのでやめましょう.
簡単にインストールできるのは Code Spell Checker だと思います.
機能的にはOSのスペルチェック機能を使う Spell Right が優秀だと思いますが,Windows ではOS側の設定が面倒です.Macだと簡単かもしれません.

2018年2月10日土曜日

英語論文執筆のために arXiv からの例文検索サービスを作った話

arXiv の論文から例文を検索する Hyper Collocation というサービスを公開しました.

以下はあまり整理されていない製作の記録です.

英語論文執筆用の例文検索サービス

英語での論文執筆の際に,専門用語を含む例文や言い回しのパターンを知りたいことが多々あります.有用なサービスとしては


がありますが,

  • データがライフサイエンス系の論文に限られている(ライフサイエンス辞書)
  • ソートの基準が頻度順ではないため典型的な例文が上位にこない
  • ストップワードに近い頻出語を検索した際の
    • 検索が重い(Springer Exemplar)
    • 表示可能な検索結果が偏る(ライフサイエンス辞書)

という不満点があったので,並行して個人的な資料から検索を行うプログラムを作って使っていました.

しかし,個人的に収集した英語論文ではやはりデータベースが小さく,例文検索エンジンとしてはいまいちだなーと思っていました.

arXiv Bulk Data Access

何がきっかけだったか忘れましたが,去年の年末あたりに arXiv が Bulk Data Access という全論文のデータを一括ダウンロードできるサービスを提供していることに気が付きました.

データの公開は Amazon S3 で  Requester Pays Buckets として行われており,700GBくらいのデータなので,全部ダウンロードすると8000円くらいかかります(多分それくらい請求されていたと思います).
これをダウンロードして例文検索エンジンを作れば冬休みの間楽しめそうだなと思ったので,今回の冬休みのPCと人間の空き時間をこの課題に投入することにしました.ちなみにダウンロード可能なデータには
  • PDF
  • LaTeXソース+図表のファイルのアーカイブ
の二種類がありますが,PDFよりも精度の良い文章の抽出が可能なのでLaTeXの方をダウンロードしました.

コーパスへの変換

ダウンロードしてきたデータはLaTeXのソースを含んだアーカイブなので,まずこれを展開して文章を抽出し,コーパスとして出力するプログラムを書く必要があります.LaTeXからプレーンテキストへの変換方法にはざっと調べた感じ
といった選択肢がありましたが,もとのデータ量がそこそこ多く,ヘッダ,図表,参考文献リスト,箇条書きなどの,そもそもコーパスに入れたくない情報はカットしておきたかったので,構文解析後のAST(抽象構文木)にフィルターを掛けられる Pandoc で変換を行うことにしました.

Pythonで書いたスクリプトですべてのファイルを処理し,得られたテキストデータのコーパスのサイズは約24GBでした.

FM-index に基づく検索エンジンの作成

検索のたびに24GBを普通に総当たりすると耐え難い速度になりますので,
検索用のインデックスを作成する必要があります.

10年ほど前に小規模なデータで同じことをやった時には接尾辞配列を使ったのですが,ざっくり元データの5倍程度のサイズのインデックスが必要で,24GBのコーパスを使うと100GB以上のインデックスをメモリ上に置くことになります.SSD上にインデックスを置くことも考えたのですが,雑な実装では耐え難い遅さだったので,データ構造の改善を考えることにしました.
本筋とは全く関係ないですが,このあたりまでは新年なので普段使わない言語を使おうと思い,C言語なみのパフォーマンスが出せそうな言語という基準で Go言語を使って書いていました.しかしWindows環境で32GB以上のメモリを使えないという仕様にげんなりしたので,やめにしました.代替として Rust を使おうかとも思ったのですが,残り時間が心もとなかったので,久しぶりにC++で書くことにしました.C++11以降の C++ は以前とはまるで別言語のようで,新しい言語を学ぶのと同程度に楽しかったです.
データ構造についての話にもどります.圧縮接尾辞配列を使えば元のデータよりも小さいインデックスで検索が可能という話を小耳に挟んでいたので,これについて勉強することにしました.このあたりの話題については,ネット上にわかりやすい資料がたくさんあって助かりました.

一通り調べて勉強した結果,今現在では FM-index というのを使うのがベストで実装としては Succinct Data Structure Library を使うのが楽ちんという結論に達しました.
WSL由来のiostreamの実装が4GB以上のファイルを読むと死ぬ問題など,色々と大きいデータに絡む問題がこの後も続きましたが,24GBのコーパスを5GB程度のインデックスに圧縮でき,スニペット200個を1秒程度で返せる速さになったので,この辺で満足してつぎの段階に進むことにしました.

Crow + Vue.js によるWebフロントエンド

Webブラウザから検索を行えるようにしたかったので,まず,軽量なC++用のフレームワークである Crow を利用し,REST API の形で検索を提供するアプリケーションサーバーを実装しました.Crowは今どきのC++の機能を活用した使いやすいフレームワークで,Python における Flask と同じような簡単さで書くことができます.

適当なテンプレートエンジンを持ってきてC++のアプリケーションサーバーに HTTP/HTTPS アクセスを受けさせようかとも思いましたが,

  • 静的なファイルを扱うのが面倒
  • SSL対応も面倒
  • 通信圧縮とかも面倒
  • リダイレクトとかしたくなった時も面倒
と,やっぱり普通のWebサーバーを立てておき,検索APIへのアクセスだけリバースプロキシでアプリケーションサーバに転送するのが妥当に思われたので,そうすることにしました.

Viewの部分には最近流行っていて使うのが簡単そうな Vue.js を使うことにしました.
5年ほど前に一度 AngularJS を使った時にも使いやすさに感動しましたが,Vue.js の方がすんなり使えたような気がします.とはいえ,どちらのフレームワークについても大したことをやらなかったので,明確な差を感じる部分はなかったです.

Vue.jsで作ったフロントエンドを含む静的なコンテンツの提供とリバースプロキシを行うための Webサーバーが必要ですので,ここには nginx を使うことにしました.
いつも Apache ばかりで nginx は初めて使いましたが,やっぱり設定ファイルが簡単なのはいいことですね.

Amazon Web Service へのデプロイ

C++で書かれたアプリケーションサーバーには約10GB (順方向と逆方向のインデックス5GB×2)のメモリが必要です.また,起動時に10GBのデータをHDDなりSSDなりから読み込む必要があるので,普段使いのPCで使うたびに起動するには起動時間が長すぎ,常駐させるにはメモリを食いすぎるという微妙な状況になってしまいました.

というわけで,検索エンジンをサーバーで走らせようと思い立ち,話にはよく聞くもののまともに使ったことがなかった Amazon Web Service (AWS) の EC2 を使ってみることにしました.
スペックを眺めてみたところ r4.large というインスタンスが必要最小限のスペックを持つようだったのでこのインスタンスを作成してデプロイしました.設定も簡単で速く,世間でAWSがもてはやされている理由の一端を体感できたように思います.

サービス公開

というわけで,快適な例文検索環境を手に入れることに成功したのですが,EC2 のr4.large インスタンスには月々1万円程度の維持費がかかり,個人的に使うにはちょっと基礎代謝が大きすぎるサービスになってしまいました.

個人所蔵の論文集をコーパスとしていた当時は,検索エンジンが合法かどうか議論されているような時代だったので,サービスの公開はあまり考えませんでしたが,
現時点では検索結果としてarXivにリンクする形でスニペットを表示することは問題ないようです.そこで,サービスを公開して大人数で有効活用することで元を取ることにしましたという次第です.

TeXclipでの経験に基づくと,広告でサーバー代が賄えることはあり得なさそうですが,公開することで得られる経験も色々とあったので,今回も元が取れた気分になるんじゃないかな~と期待しています.

感想

検索アルゴリズムやデータ構造にはプログラミングやコンピュータサイエンスのおもしろい要素が詰まっているので,たまに手をだすとおもしろいです.
あと,暫く見ないうちにC++がモダンな感じになっていてびっくりしました.つぎはEigenあたりを使いつつ勉強してみようかなという気になりました.

おまけ:名前の由来

冒頭の方でチラッと,今回公開した例文検索サービス以前から個人用のツールを作って使っていたことを書きました.サービス名の Hyper Collocation は10年ほど前から存在するこのツールから引き継いだものです.この名前は
  • 開発の初期段階で Hyper Estraier を参考にしたこと
  • 当時の先生に 新編 英和活用大辞典―英語を書くための38万例 を教えてもらい,
    大変役にたったことが開発のきっかけとなったこと
    (この辞書の表紙に THE KENKYUSHA DICTIONARY OF ENGLISH COLLOCATIONS と書いてあり,これを見て初めて collocation の概念を知りました.)
  • 当時は Web2.0 末期(DoCoMo2.0 がコケたころ)で,ハイパー**というネーミングが相当に使い古された感があったので,Hyper Collocation という名前をつけても名前被りの何かが出現する危険がなさそうに思われたこと
から適当に付けたような気がします.今となっては何もかも過去のことであり,当時のコードは一行も残っていませんが,多少の愛着があったので名前だけは残すことにしました.

参考文献

検索アルゴリズム

C++

2017年9月17日日曜日

ベクトル場の可視化



最近天気予報で見る風の可視化がかっこよかったので,真似して研究で使うベクトル場の可視化をやってみたところ,細部がわかりやすくていい感じでした.

汚いですがコードはMATLABのコードは以下のような感じです.
動画のベクトル場を生成するコードはすごく長いので,単純な円を描く流れにしてあります.コードの最初の部分でお好みのベクトル場を指定してみてください.

2016年11月18日金曜日

機械学習に関連する学会のクラスタリング

機械学習周辺の学会/論文誌が多くて関連性がよくわからなかったので,引用関係をもとに可視化してみました.マウス操作で拡大/スクロールしたり,マウスオーバーで関連エッジが強調表示されたりします.


全画面表示 / ソース

元データには Aminer が公開している Citation Network Dataset を使っています[1].
[1] Jie Tang, Jing Zhang, Limin Yao, Juanzi Li, Li Zhang, and Zhong Su.
  ArnetMiner: Extraction and Mining of Academic Social Networks.
  In Proceedings of SIGKDD'2008. pp.990-998.

ノードが各論文誌/講演会に対応しており,各ノードのサイズは被引用数を示しています.より具体的には,50件以上の引用/被引用の関係があるノード間にエッジを生成し,引用数に応じた引力と斥力に基づいた運動をシミュレーションすることで,クラスタを形成させています.

ICML(緑色のノード)などのいわゆる機械学習の学会は(近年のブームのせいか)同種内の引力よりも周辺分野からの引力が強いようで,面積が大きい緩いクラスタを形成しているようです.

機械学習の周辺ではコンピュータビジョン,言語処理,ニューラルネット,人工知能などが目立つクラスタを形成しており,データマイニングは機械学習と同様,面積が大きい緩いクラスタを形成しています.

自分の専門が制御理論なので,制御分野の論文誌である Automatica(赤色のノード) と機械学習のトップカンファレンスである ICML (緑色のノード)の近傍にある学会を抽出して可視化してみましたが,大本のデータが DBLP で,制御理論の分野の引用関係があまり収録されていないので,制御分野については寂しい感じになっています.
信号処理とロボットが制御分野の近くでクラスタを形成しており,これらとコンピュータビジョン・ニューラルネットが機械学習との間に位置しています.また,最適化や応用数学のクラスタが制御の近くにあるのもわりと納得です.

前述したデータセットの処理には python および NetworkX, ノードの配置に Gephi,可視化には D3.js を利用しています.これらの有用なソフトウェアを開発・公開されている方々に感謝します.

あと,超重いですがコンピュータ関連分野全体を可視化したものも置いておきます.
https://maruta.github.io/visnet-dml/full/

2016年3月10日木曜日

MATLABで関数型プログラミング入門

先日まで Northeastern University の Robust Systems Lab で訪問研究員をやっていました.その時に関数型プログラミング入門のチュートリアルを行ったのですが,わりと好評だったと思うので,スライドを日本語化したものを公開します.



いわゆる手続き型の言語にも関数型言語由来の機能が追加されるようになって久しく,研究のためのコーディングでもこれらの機能は有用です.しかし,これらの機能の使い道がピンとこないまま,あるいは存在に気づかないまま活用できずにいる学生が多いように感じています.

普通であれば「関数型プログラミングについて勉強しておいて」と学生に伝えれば済むのですが,典型的な関数型プログラミングの解説は典型的な学生に関数型プログラミングの有用性を理解させられるものではなく,学生にとっての体感的な学習コスパ(=有用性/学習コスト)が著しく低いために身につかないように思われます.僕の感覚では,「手続き型言語に追加されている関数型言語由来の機能でちょっと楽をしたい」程度の低いこころざしの範囲であれば,関数型プログラミングの学習コスパは極めて高く,これは適切な教材の不在によって生じている損失のように思われました.

というわけで,このチュートリアルを行うにあたっては,学生が興味を持ちそうな卑近な(日々の宿題を解くのに役立ちそうな)例題を選び,利便性の積極的なアピールを行うアプローチを試みています.大学生という聴衆に特化しているので役に立たない場合も多々あるかと思いますが,何かの参考になりましたら幸いです.



2016年1月7日木曜日

Atom で LaTeX on Windows (+ 最近のビルド環境)


新しい環境を求めて LaTeX の編集環境を Sublime Text 2に移行しましたが,Sublime Text 3 がいつまでもβ版だったりして停滞感があるところで Atom が流行してきたので,そっちに移行していました.

当初は完成度が低くて実用的ではなかったのですが,最近(2016年1月頃)は実用にギリギリ耐える気がしてきたので,設定や注意事項をメモしておきます.

TeXのインストール

多くの方のご尽力により,世界でも標準的な TeX Live をインストールすれば日本語でも不自由しないので,これを使っています.以下でも TeX Live で普通にインストールした環境を前提としています.

何かとTeX関連のバイナリにパスが通っていることを前提としているパッケージが多いので,

C:\texlive\2015\bin\win32

を環境変数Pathに追加してください.
(上記はTeX Live 2015を既定の設定でインストールしたときのパスですが,バージョンなどに合わせて適宜読み替えてください.)

Atomのインストール

Atomのホームページからインストールできます. 最近は標準的なインストールで日本語が問題なく使えます.ただ,後述しますがフォントの設定はした方がよいように思います.

シンタックスハイライティング

文法に応じて色付けするあれです
をインストールします.なお,Atomでのパッケージの検索とインストールは File メニューの Settings で設定のタブを開き,Install を選んで表示される画面から行うことができます.

Latexmkによる自動コンパイル

一応ビルド用のパッケージがあるのですが,日本語原稿と英語原稿で設定を切り替えたりするのが面倒なのと,TeXのエラーメッセージは機械可読性がいまいちで完全にエラーハンドリングできることを期待できないので,最近はエディタのパッケージでビルドを行うのではなくlatexmkで常時自動コンパイル状態にしています.

latexmkrcファイルの準備

文書ごとにフォルダを用意し,TeXのソースを格納しているフォルダに日本語の場合は以下のような latexmkrc ファイル(ファイル名の頭にドットはついていません)
英語の場合は以下のような latexmkrc ファイル
を配置して,TeXのソースを格納しているフォルダで開いたコマンドプロンプトで

latexmk -pvc

を実行しておけばTeXのソース(やbibファイルや図のファイル)が更新されるたびに自動でコンパイルしてくれます.自動でビューワーの起動も行うのですが,後述の Atom内PDFビューワーを使う場合は不要なので設定ファイル内のコメントのように exit か何かを指定しておくとよいと思います.ビューワーを起動しないでコンパイルだけするオプションは無いような気がします.

また,この場合TeXソースがあるフォルダまでCDするのは面倒なので

  • エクスプローラーでシフトキーを押しながら右クリックするとメニューに密かに「このフォルダでコマンドプロンプトを開く」という項目が増えているので,これを使う.
  • atom-terminal パッケージをインストールすると,atom 左側の tree-view でフォルダや右クリックした際に表示されるメニューに Open terminal at root が追加されるのでこれを使う.

などの方法を覚えておくと便利だと思います.

エラーの確認

エラーは.logファイルに出力されています.後述するPDFファイルのタブとともにAtomで開きっぱなしにしておいても順次更新されるので,僕は開きっぱなしにしています.なお,logファイルを色付けして表示するためには Grammar を LaTeX Log に設定する必要があります..log ファイルを開いた状態で右下に Plain Text と表示されているので,これをクリックすると Grammar を選択することができます..logの拡張子で自動的にGrammarを変えることも可能でしょうが,LaTeX以外でも.logの拡張子を持つファイルがあるので特に設定していません.

備考

ファイル名の頭にドットがついた .latexmkrc をホームフォルダ(WindowsではHOME環境変数で指定したフォルダか C:\Users\maruta とかになっていると思います)に配置すると latexmk はデフォルトでその設定を使ってくれますが,昔のTeXソースをコンパイルするときの設定を忘れたり英語原稿と日本語原稿で記述を変えたりするのが面倒なので,TeXの原稿ごとに設定ファイルを配置するこの形に落着きました.

Atom内でのPDFプレビュー(+SyncTeX)

実は大してメリットがない気もしますが,AtomのタブでPDFを開けるとなんかカッコいいです.
をインストールするとこれが実現でき,表示されたPDFをクリックした際に対応箇所のTeXソースに飛ぶSyncTeXを利用することができます.

日本語PDF問題

長らく標準では日本語のPDFが文字化けしていました.これに関してIssueがあったものの途中で止まっていたのですが,調べてみたところ解決できそうでしたのでお願いして直してもらいました.


バージョン 0.39.0 以降では日本語が利用可能です.Issueを作成された@yohasebeさんと開発者の@izuzakさんに感謝いたします.

PDFへのフォント埋め込み設定

Atom の pdf-view パッケージではフォントを埋め込んでいないPDFファイルの漢字には中国語フォントが適用されるようです.ひらがなに使われる日本語フォントとの組み合わせと相まって日本語の文書は大変見苦しくなりますので,何らかのフォントの埋め込みをお勧めします.
TeX Live のコマンドプロンプトで

kanji-config-updmap status

を入力して状況を確認し

kanji-config-updmap ipaex

などのコマンドで埋め込むフォントを選択することができます.

pdf-view の現状の課題

ここまで書いておいてなんですが,100ページくらいのPDFを開くと簡単に不具合を起こしたり,テキストが選択できなかったり検索がかからなかったりするのであまり使い勝手が良いわけではありません(2016年1月現在).今後の進化に期待です.

SumatraPDFでのPDFプレビュー(+SyncTeX)

Atomの外部でPDFをプレビューする場合,いわゆる Acrobat や Reader でPDFファイルを開くとPDFファイルがロックされてTeXのコンパイルができなくなるので,コンパイルのたびにビューワーを閉じないといけませんが,PDFファイルをロックしない SumatraPDF を使うと,PDFを開いたまま修正とコンパイルを行うことができます.SumatraPDFは
からダウンロード可能です.

またビューワー上でクリックした際にTeXソースの該当箇所に自動で移動する SyncTeX については,上述の latexmkrc 内での指定のような -inverse-search オプションを付けて起動するか,適当な(TeXで生成された)PDFを開いた状態でSumatraPDFの左上のアイコンをクリックして表示されるメニューから Settings → Options をクリックし,Set inverse search command-line の項目を

"C:\Users\maruta\AppData\Local\atom\bin\atom.cmd" "%f:%l"

のように設定してください.

atomの実行ファイルはユーザー毎のフォルダにインストールされているので,どの場合も実行ファイルのパス中に含まれる maruta を自分のユーザー名で置き換えることに注意してください.

スペルチェッカの設定

Atomには標準でスペルチェッカがついています.が,Windows の場合
  • Windows 標準のスペルチェッカが使われる
  • 言語はシステムの設定に準じる
という仕様になっているで,英語のスペルチェッカを使うためにはシステムの言語設定を英語に切り替えるしかありません.この辺の仕様については色々と議論があるので,
そのうち改善するような気もしますが,今のところAtomでLaTeXを使う上で最大の問題かもしれません.LaTeX編集中にスペルチェッカを有効にするためには
[File]-[Setting]でPackagesの画面を開き,spell-checkを検索します

そしてspell-checkパッケージの設定画面(Settings)に移動し,Grammarsの項に text.tex.latex を追加します.

フォントの設定

File メニューから Settings の画面を開き Font Family のところに CSS でフォントを指定する要領で書くことができます.僕の設定は

Consolas, メイリオ

です.カンマで区切って列挙すると最初のフォントに含まれない文字は次のフォントで表示される感じになるので,簡単に好きな英文フォントと和文フォントを組み合わせることができます.個人的には,ここの簡単さとフォントのレンダリングがWebブラウザ並みに綺麗という点が LaTeX 編集に Atom を使う最大のアドバンテージな気がします.

僕は日本語を書くときには等幅を妥協する派ですが,等幅フォントが好きな人はMiguフォントとかを使うと良いと思います.

覚えておくべき機能

スニペット Snippet

今どきのエディタの定番機能で,定型コードの入力を大幅に省力化できます.とりあえず language-latex パッケージをインストールした際にLaTeX用のスニペットが登録されているので,適当なTeXファイルを開いて[Alt]+[Shift]+[S]のショートカットを使うと一覧を見ることができます.

この一覧から使いたい項目を選択することもできますが,項目の上側に表示されているprefixを覚えておけば,通常の文と同様にprefixを入力し[TAB]を押すことでスニペットを使うことができます.

文脈によって(数式環境の中とか外とか)有効なスニペットが変わったりするので色々試してみてください.

使い方に慣れてきたらスニペットの自作をお勧めします.

マルチカーソル

これまた今どきのエディタでは定番の,複数のカーソルを使って複数の箇所を同時に編集する機能です.
  • [Ctrl]キーを押しながらクリックするとその位置にカーソルが増えます. 
  • 適当な文字列を選択した状態で[Ctrl]+[D]を入力すると,選択中の文字列を検索してその位置にカーソルが増えます.繰り返し[Ctrl]+[D]を入力することで順次検索&カーソルの追加が行われます. 
慣れるとすごく便利なのでぜひ使うように心がけてみてください.

LaTeXの編集作業の中では,表や数式をいじるときに使いどころが多いと思います.

便利なパッケージなど

アイコンの拡充

をインストールするとファイルのアイコンが豊富になります.TeXのファイルも専用のアイコンになり,ツリー表示やタブが少しわかりやすくなるのでインストールをお勧めします.

minimap

今どきのエディタによくあるカッコいいあれです.
標準では入っていないですが
をインストールすると使えるようになります.

ファイル名補完

LaTeXで図や写真・画像などを使う場合,ファイル名を入力するのが地味に面倒だったりしますが,
を使うと補完の候補にファイルやフォルダの名前が出現するようになります.

カレントディレクトリ配下のファイル名を入力したい場合「./」と入力を始めると候補が表示されます.

\cite, \ref の補完

参考文献や数式,図表の番号を参照する際に
を入れておくと自動で補完してくれて快適です.参考文献については .bib ファイルを読み込んでいるので,BibTeXを使っていない場合は機能しないと思います.

まとめ

Atomはオープンソースの申し子のようなエディタであり,これまでの急速な改善からみても,いまどきの定番エディタの地位を長く維持できるような気がします.

ただし LaTeX や Windows や日本語といった辺境領域への対応はまだまだ不安定だったり完成度が低い感じですので,これからさらに開発が盛り上がることを期待したいです.
自分でもちょいちょいと貢献できたらな~と考えています.

あと,個人的には SublimeText2でだいぶお世話になり,最近 Atom 版の開発が始まったLaTeXTools に期待しています.
いまのところ動かない機能が8割といった感じなので(2016年1月現在),頃合いをみて試してみたいと思います.


2015年12月25日金曜日

TeXclipで作成した数式を後で編集する方法

TeXclipで作成した数式を修正する必要があるとき,再度TeXのコードを入力するのが面倒だという要望を頻繁にお受けしますので,簡単な方法を以下で説明します.

TeXclipの画像には代替テキストとしてTeXのソースコードを指定しています.
したがって,普通にPowerPointにコピペした画像については,「図の書式設定」の「代替テキスト」のところからTeXのソースコードを回収することが可能です.

以下のスクリーンショットは PowerPoint 2016 のものですが,リボンインターフェースに変わる前のバージョン(2003くらい?)でも「図の書式設定」ダイアログで同様の情報を取得できたはずです.「図の書式設定」はバージョンによらず画像を右クリックすると表示されるコンテキストメニューから表示できると思います.


フォントや解像度の設定についてはお手数ですが手作業で復元してください.

2015年12月24日木曜日

AdWordsで個人開発のWebサービスを宣伝してみた

はじめに

刊行ペース検索」というサービスを作りました.これはコミックや小説などの過去の巻の発売日を検索し,まとめて表示するサービスです.
  • いつごろKindle化されるか?
  • 新刊はいつ頃発売されるか?
といったことを予想するために,過去の巻の発売日を調べる作業は意外と時間がかかります.周りの友人に聞いた感触では,同じようなことに無駄に時間を使っている人は多く,潜在的な需要はそれなりにあるWebサービスなんじゃないかと思います.


しかし,こういう「意外となかったけど便利系」のサービスは,能動的に探しにくるユーザーを期待できないので,放置しても誰も来ないです.自分のために作り,レンタルサーバーの余剰リソースで運用しているサービスなので誰も来なくても特に問題はないのですが,誰も使ってくれないと寂しくなるのが人情です.

というわけで,前々からやってみたかった Google の AdWords での宣伝を試してみました.

AdWordsの設定

キーワードの選択

AdWordsはGoogleで検索する時,キーワードに応じて検索結果に混ざって表示されているあの広告を出稿するためのサービスです.AdWordsに出稿する上では,どのキーワードで検索しているユーザーをターゲットにするか?ということが最大の問題ですが,
  • 競合する広告主の少なさ(安価に広告を出せる)
  • 検索者が抱えている問題を「刊行ペース検索」が解決できる可能性の大きさ
    (クリックあたりで料金が発生するので,「刊行ペース検索」の潜在的顧客だけにクリックしてほしい)
といった点を考えた結果「Kindle版」で検索している人をターゲットに選ぶことにしました.「Kindle版はいつ発売されるんじゃ~」と思っている人以外は使わなそうなキーワードなので,用がない人を呼び込みにくいだろうというのが狙いです.

予算の設定

つぎの問題は,いくらかけて何人くらいのお客さんを呼び込むかということです.AdWordsでは1クリックあたりに支払う金額の上限と1日当たりの予算の上限を設定することができますが,どの程度の投資が効率的かはキーワードにも強く依存し,初めてだと見当もつきません.

これについては,Googleが提供している「キーワードプランナー」というツールで,どのキーワードにいくら払えば,だいたいどれくらいのアクセスを呼び込めそうか?ということが予想できるようになっています.

(このツールが意外とおもしろいので,宣伝するべき適当なサイトをお持ちの方は,このツールで遊ぶために一度AdWordsを使ってみるのもいいような気がします.)

調べてみた結果「Kindle版」のキーワードだと,限界まで投資しても15人/日くらいしか呼び込めなさそうだったので,10人/日程度のペースでサイトに誘導するべく500円/日,30円/クリックを上限に広告を出稿することにしました.

AdWordsの効果

1か月ほどAdWordsで宣伝してみた感想は以下のような感じです.

集客できた

途中いろいろと調整しましたが,だいたい10人/日くらいのペースで集客できて費用は200円/日くらいでした.特に友達でもない人を10人もサイトに連れてくるのは実際なかなか大変なので,コストパフォーマンスは悪くないと思います.

テスターを確保するツールとして意外と優秀だった

ぬるいサンデープログラマーなので,テスターを雇うことは考えたこともなかったですが,AdWordsで誘致したお客さんの行動はサイトの構造や説明文のブラッシュアップを行う上でとても参考になりました.たとえば,
  • 雑誌で検索して失敗して帰る人が多い
  • 途中で出版社が変わるコミックシリーズがそれなりにある
  • 作者の刊行ペースを検索したい人が結構いる
  • スマホでのアクセスが多い(大きい表はイマイチっぽい)
  • (Kindleをターゲットにしているので当然かもですが)
    普通のサイトよりタブレットでのアクセスがかなり多い
といったことは,AdWordsで流入したユーザーのログを見てはじめて認識できました.

また,予算の設定で流入をかなりコントロールできるので,サイトをひっそり公開しつつ,変更するたびにユーザーを流入させて,サイトの出来をチェックすることができます.まともなWebサービスで,このようにテストとも宣伝ともつかないことをやるのは悪手のように思いますが,お気楽にだらだらと開発している個人のWebサービスでテスターを確保する手段としてAdWordsは有用でした.

いつもと違う人が来る

大抵,自分が作ったサイトは自分に似た属性の人が来るものですが,広告で集客すると傾向が変わります.今回の場合,想定していたよりも年配・女性の方を多く集客しているように思いました.

自分の想定が若年・男性にバイアスしているのか,広告をクリックする寛容な人が年配・女性に多いのかちょっと判断つきかねますが,自分と属性が離れた人を集めるのは普通難しいので,使いどころによってはすごく便利かもしれません.

おわりに

というわけで,意外と得るものが多かったAdWordsでの宣伝ですが,そろそろ利用パターンが出尽くしてリピーターが増えてきた感があるのと,通常の検索流入も増えてきたので打ち切ろうかと思っています.

個人でWebサービスを開発した場合,お金を払って宣伝することにハードルを感じる人が多いのではないかと思いますが,AdWordsでの宣伝はGoogleの技術の一端に触れることもでき,意外と楽しいのでおすすめです.

2015年12月4日金曜日

Arduino とレゴで倒立振子(3)電源の性能

かなり前に
という記事を書きましたが,その後これに関連して学会発表をしたり特集号の記事を書いたりしてブログの更新を忘れていました.

特集号の記事は
にあります.現在は計測自動制御学会の会員でないと全文が読めませんが,一年後(2016/3)から無料で読めるようになるはずです.

また,記事の補足として実験機が動作している動画を公開しておきます.


この実験は安定化されているモバイルバッテリーを電源にしていることのメリットを示すためのもので,ギリギリ安定化できている程度の性能が悪い(=よく揺れる)制御器でも14時間程度連続して倒立しており,電源の消費によって実験の再現性が損なわれていないことを確認するものです.

制御器を完全にチューニングすれば持続時間は日単位になると思いますが,あまり意味がないわりに面倒な実験なので試していません.長時間動作させる実験では,地面の起伏とタイヤの滑りで倒立振子が予想できない方向にじわじわ動いていくために,意外と広い実験場所が必要になることと,実験を記録するためのカメラの持続時間が問題になります.もし同様の実験をされる方がいらっしゃいましたら参考にしてください.

3年間授業でこの倒立振子を使っているうちに,いくつか新しい技術が利用可能になり,改善したい点もでてきたので,そのうちまた実験機と記事をアップデートすると思います.

2015年11月18日水曜日

Kindle版の発売日を推定するためのWebサービスを作りました

Kindle版が紙媒体の書籍からどれくらいの時間差で発売されるかは,特に出版社ごとに決まった法則があるわけでもなく,本によってケースバイケースのようです.

しかし,漫画のようにコンスタントに続巻が発売されるものでは,発売日を順番に並べてみるとそれなりに規則性があり,十分に発売日を予測可能なように思われます.

というわけで,Kindle版・コミック版などの発売日を検索し,並べて表示するサイトを作りました.

刊行ペース検索
Kindle版に限らず発売日の予測に便利なので,ぜひご利用ください

以下は技術的なメモです.

2015年6月19日金曜日

netduino 3 wifi で雨量確認ガジェットを作る




最近,研究に使う関係で色々なマイコンを調べていますが,その中でも比較的最近発売された netduino 3 wifi というのがおもしろそうだったので,個人的に購入して遊んでみました.

2015年6月15日月曜日

TeX Live 2015 でアップデートされたパッケージ

TeX Live が2015にアップデートされました.
たまにアップデートされたパッケージが原因で不具合がでることがあり,
原因の特定に手間取るので,2014を消す前に差分をメモしておきます.

以下のリストは適当なスクリプトで自動生成して特にチェックしていないので
重大な間違いがある可能性があります.ご注意ください.

2015年3月5日木曜日

dvipdfmxやdvioutでGhostscript 9.15が\undefinedresourceエラーを出す場合の対処

dvioutやdvipdfmxがeps形式の画像を処理する場合,Ghostscriptが呼ばれます.
最近 TeX Live 2014 をインストールしたマシンでこの処理が

Error: /undefinedresource in resourcestatus
Operand stack:
   false   ct_StyleDicts   --dict:0/4(L)--   Adobe-Japan1   --dict:0/4(L)--   Serif   HeiseiMin-W3-83pv-RKSJ-H   Font   HeiseiMin-W3   CIDFont
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1983   1   3   %oparray_pop   1983   1   3   %oparray_pop   1982   1   3   %oparray_pop   --nostringval--   1966   1   3   %oparray_pop   1852   1   3   %oparray_pop   --nostringval--   %errorexec_pop   .runexec2 --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   1931   10   9   %oparray_pop
Dictionary stack:
   --dict:1196/1684(ro)(G)--   --dict:0/20(G)--   --dict:87/200(L)--   --dict:57/75(L)--   --dict:2/10(L)--   --dict:39/70(L)--   --dict:0/4(L)--   --dict:0/4(L)--   --dict:20/27(ro)(G)--   --dict:20/26(ro)(G)--
Current allocation mode is local
Last OS error: No such file or directory
GPL Ghostscript 9.15: Unrecoverable error, exit code 1

という感じのエラーを出していたので,いろいろ調べてみたところ
TeX Live に付属のGhostscript(tlgs)がバージョン 9.15になったときの変更で
動作しなくなったようです.

場当たり的な対応ですが,とりあえず
http://www.ghostscript.com/GPL_Ghostscript_9.10.html
からバージョン9.10のGhostscriptをインストールして
C:\Program Files (x86)\gs\gs9.10\bin
の内容を
C:\texlive\2014\tlpkg\tlgs\bin
にコピーすれば動くようになります.

Ghostscriptの置き換え方については↓のQ&Aを参考にしました.
http://tex.stackexchange.com/a/204490

あまりよいやり方ではなく,TeX Live をアップデートした拍子に新しいバージョンで
上書きされたりしそうなので,よりよい方法をご存知の方がおられましたら,ぜひ教えてください.

2014年7月27日日曜日

three.jsでブラウザ上で動くインタラクティブな倒立振子シミュレータを作る

引っ越しを機に研究室のサイトを現代的に改装することになりました.

上の倒立振子振り上げアニメーションはサイトのトップページを15年間飾っていた年代物ですが,これもその一環として現代の技術水準で更新することにしました.目標は滑らかでインタラクティブ(ユーザーが外乱を与えて制御系の反応を観察できる)なアニメーションを設置することです.
そのためには
  • ブラウザでリアルタイムに動作する倒立振子振り上げ制御器を実装する
  • ブラウザでリアルタイムに倒立振子の3Dグラフィックスを描画する
必要があります.今後改装を行うときのために,これらのポイントについてメモしておきます.
なお,完成品は以下の様な感じです.


手での操作が可能な完全版は研究室のトップページ

リアルタイム倒立振子振り上げ制御

ユーザーが与える外乱は事前に予測不可能なので,ブラウザ上でリアルタイムに動作する制御器で2本の倒立振子の振り上げを実現する必要があります.最高の効率(最小の制御動作)でこれを行うことは非常に困難な問題ですが,効率に目を瞑ればそれほど難しい問題ではありません.今回はインスピレーションで簡単な切替え制御則を設計しました.実装は
にあります.振り上げたあとの安定化は研究室内学生実験の成果を利用しています.ちなみに倒立振子のモデルは
です.基本的にはアーム部分の加速度を自由に制御できる物として運動方程式を立てただけですが,リアリティを出すためにモデルでもモーターに速度リミッターをつけています.
なお,実装において必要となる演算には Numeric.js を利用しました. Numeric.js は行列計算に加えて数値積分のルーチンまで持っているので,倒立振子シミュレータもこの機能を使って実装しています.
倒立振子のシミュレータに物理エンジンを使えば後々おもしろい拡張も可能かと思いましたが,現状では少し動作が重いようだったので割愛しました.自分のサイトでは重さを度外視して物理エンジンを使ったセグウェイライクな自走式倒立振子シミュレータを設置しているので興味があれば遊んでみてください.

ブラウザ上での倒立振子の3D描画

15年前にはブラウザ上でリアルタイムに3Dグラフィックスを描画するのはほぼ不可能でしたが,最近はブラウザ上でもWebGLという標準仕様で効率的に3Dグラフィックスを描画することができます.しかしWebGLを使って直にプログラムを書くのは大変手間らしく,three.jsというのを使うのが楽なようです.

実際 three.js を使った描画は非常に簡単で,MATLAB用の描画プログラムから特に苦労することもなく倒立振子を描画するルーチンを作成することができました.ただ,作ってから気がついたのですが
  • safari (iPhoneのブラウザ) が WebGL にデフォルトで対応するのはおそらく9月
  • Windows上ではWebGLで DirectX が描画に使われる関係で太い線を描画できない
という問題があったので,現時点では three.js の renderer として WebGLRenderer ではなく CanvasRenderer を使っています.
それほど複雑な物体を描画するわけではないので,こちらのほうが多くの環境で快適に動作するはずですが,何年かしたら WebGLRenderer に切替えてもいいかもしれません.

その他

ワイヤーフレームでの四角形面の描画について

three.jsは,あるバージョンから四角形面を描画する機能が省かれた(3角形2つに分割される)ようです.通常の描画であれば全く問題ありませんが,ワイヤーフレームで描画した場合線が増えて鬱陶しいので,やや古いバージョン(r59)を使っています.最近もバージョンアップで描画性能が向上しているようなので,状況が変われば three.js のバージョンを上げるべきかも知れません.

背景の写真との整合について

背景の写真と倒立振子でパースが狂っていると気持ち悪いので実物の倒立振子が写真に写っていた場合と同じ見え方になるように計算しています.
といってもthree.jsのカメラ設定時に写真撮影時と同じ情報を指定するだけです.
なおthree.jsに指定する画角は画面の縦幅に対応する画角なので,$d$をレンズ焦点距離,$h$をカメラのセンサーの縦幅として
\[
2\tan^{-1}\left(\frac{h}{2d}\right)
\]
で計算される角度にすれば良いと思います.

safariでテクスチャが歪む問題について

three.js の CanvasRenderer と safari (iPhone iPad 等の mobile safari 含む)の組み合わせでテクスチャが正しく表示されない問題がありました.
safariのバグらしいのでそのうち直るかもしれませんが,とりあえずgithubのこのコメントにしたがって
texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set( 1, 1 );
とすると正常に表示されます.


2013年9月5日木曜日

Sublime Text の BeautifyRuby プラグインが check your ruby interpreter settings エラーを出すときの対策

Sublime Text で Ruby のコードを書いていて,自動整形が欲しくなり BeautifyRuby プラグインをインストールしたものの "check your ruby interpreter settings” エラーが出て困ったので対策をメモ.

cygwin で Ruby をインストールしていてバージョンが 1.9 以上という場合に限ると思いますが Preferences → Package Settings → BeautifyRuby → Setting で出てくる設定ファイルで "ruby" の行を

  "ruby": "C:\\cygwin64\\bin\\ruby -Eutf-8",

とすると動きました.マニュアルには Windows では "ruby" : "ruby" と設定するように書いてありますが,日本語を含んでいるファイルを整形した場合
  "invalid byte sequence in Windows-31J (ArgumentError)”
というエラーが発生しているようだったので -Eutf-8 オプションを ruby 実行時に与えてみたところ動くようになったという感じです.


2013年8月29日木曜日

Windows の TeX Live 2013 でヒラギノフォントを埋め込む方法

学会の投稿論文ではしばしばフォントの埋め込みを指示されることがあります.これは結構な頭痛の種でしたが,TeX Live 2013 からは kanji-config-upd というコマンドが用意されていて容易く埋め込み設定を行うことができるようになりました

Windowsの場合,

kanji-config-updmap status

というコマンドで利用可能な選択肢を確認すると,インストールされている Adobe 製ソフトウェアに依存しますが

CURRENT family : noEmbed
Standby family : ipa
Standby family : ipaex
Standby family : kozuka
Standby family : kozuka-pr6n
Standby family : ms

という感じの結果が得られると思います.
この中でライセンス的に確実に安全な選択肢はIPAフォントですので,見た目に拘らないならこれを使うべきです.
小塚フォントは Adobe のソフトウェアと一緒にインストールされていることが多いですが,フォントデータが再利用可能な形で配布してはいけないことになっているので,PDFに埋め込んで配布すると咎められる可能性があると思います.
MSゴシック/MS明朝に関してはフォントの埋め込み可能フラグが立っているので埋め込みを行って良いように思われますが,埋め込んだPDFの利用に関する明確な許諾範囲がネットではみつかりませんでした.また,見た目に関しても Macに標準で付属しているヒラギノフォントに比べるとちょっといけてない気がします.

埋め込み可能なヒラギノフォントの入手

というわけで,たいへんニッチな話題ですが,Windowsでヒラギノフォントを埋め込んだPDFを作る方法についてメモしておきます.
まず,ヒラギノフォントの入手方法ですが,僕は「一太郎2012承 プレミアム版」のバンドル品として入手しました.一太郎以外のソフトでも利用可能で,商用・非商用を問わずサブセットであれば埋め込んでよいと明記されているので安心です.
通常の手段で購入する場合はモリサワのセレクトパックなどで購入することになると思いますが,その場合は結構なお値段(Macより高いかも?)になるので 基本7書体パック の方を amazon とかで買ったほうが費用対効果が高いかもしれません.なお,Macに付属のフォントをWindowsにコピーすることは禁じられているはずなので注意してください.

ヒラギノフォントを利用可能にする設定

TeX Live 2013 にはヒラギノフォント用の設定が含まれていますが,Mac付属のものを前提としたものであり,一太郎バンドルのものを扱うには設定が必要です.
具体的にはフォントファイルのファイル名が異なるので,そのままでは認識してくれません.

この問題を解消するためには,c:\texlive\texmf-local\fonts\opentype\public\hiragino というフォルダを作成し,管理者権限でコマンドプロンプトを起動して以下のようなコマンドを入力します.

cd c:\texlive\texmf-local\fonts\opentype\public\hiragino
mklink HiraKakuProN-W3.otf "C:\Windows\Fonts\ヒラギノ角ゴ ProN W3.OTF"
mklink HiraKakuProN-W6.otf "C:\Windows\Fonts\ヒラギノ角ゴ ProN W6.OTF"
mklink HiraKakuStdN-W8.otf "C:\Windows\Fonts\ヒラギノ角ゴ StdN W8.OTF""
mklink HiraMaruProN-W4.otf "C:\Windows\Fonts\ヒラギノ丸ゴ StdN W4.OTF"
mklink HiraMinProN-W3.otf "C:\Windows\Fonts\ヒラギノ明朝 ProN W3.OTF"
mklink HiraMinProN-W6.otf "C:\Windows\Fonts\ヒラギノ明朝 ProN W6.OTF"

これによって TeX が認識するシンボリックリンクが作成されます.(ちなみに mklink コマンドが存在するのは Vista 以降の Windows です.)
その後,管理者権限ではない TeX Live のコマンドプロンプトで

mktexlsr
kanji-config-updmap status

と入力すると

CURRENT family : noEmbed
Standby family : hiragino-pron
Standby family : ipa
Standby family : ipaex
Standby family : kozuka
Standby family : kozuka-pr6n
Standby family : ms

のように表示されているはずなので

kanji-config-updmap hiragino-pron

と入力すると,ヒラギノフォントが埋め込まれるようになります.


2013年8月17日土曜日

Android タブレットで倒立振子

突然ですが,諸般の事情で Android タブレット(Nexus 7)を制御器としたセグウェイっぽい自走式倒立振子を作りました.忘れないうちに製作の要点をメモしておきます.後日気が向いたときに詳細な記事を書くかもしれません.
Android タブレットは内蔵するジャイロセンサで角速度を計測し,モータに印加する制御入力の計算を行います.腕のように見えるのはレゴブロックで作られたバンパーで転倒時と机からの落下時に液晶画面を守ります.

IOIO-OTG と HUB-ee Wheel による製作容易なハードウェア

ハードウェア的に特に重要な部品は IOIO-OTG と HUB-ee Wheel です.


上の写真が IOIO-OTG で,これを介して Android からモータを駆動することができます. いわゆる ADK と似たような機能を持ちますが小型であることをはじめとして,様々な面で扱いやすいと思います.


上の写真は HUB-ee Wheel で,一見タイヤに見えますが中にモータ・モータドライバ・エンコーダを内蔵している便利部品です.エンコーダがかなり粗く(4逓倍で128カウント/回転)カウンタを内蔵していない点が少し残念ですが,レゴブロックと簡単に結合でき,ハードウェアの製作を飛躍的に簡単にしてくれます.

また,今回は適当な Nexus 7 専用ケースに両面テープで電池などの部品とレゴブロック2本を接着し,あとはレゴブロックを嵌め合わせることで HUB-ee Wheels を固定し,バンパーなどを構築しています.


制御器の連続時間実装

ソフトウェア,つまり制御理論の面でやや特殊なのは制御器の連続時間実装を行っている点です.というのも,Android は非リアルタイムOSで一定周期でのジャイロセンサによる計測や制御入力の更新が困難だからです.実際 IOIOLib Application Framework で何も考えずに制御ループを回したときの実行間隔は以下のようになります.


概ね 5 ms 程度の間隔でループが回っているものの 20 ms 以上の間隔になることもしばしばあり,離散時間システムとしての実装には多少無理があることがわかります.

倒立振子のモデリングと制御器の設計は特に特殊なところはありません.

今後の課題

現状では IOIO-OTG がエンコーダのカウントをサポートしておらず,Androidのソフトウェアによる計数を行っているので,高速に移動したり制御周期が長くなったりするとエンコーダの取りこぼしが発生してしまいます.

本来なら Android 端末を使った自走式倒立振子のメリットとして,カメラやネットワークを簡単に利用できることが挙げられるべきですが,この問題のために制御周期への影響が大きいと考えられるこれらの機能が使いにくいのが残念なところです.

本格的に遊ぶためにはエンコーダ用のカウンタ回路を IOIO-OTG の外部に設けるべきであると考えられます.


2013年3月13日水曜日

使ってはいけない LaTeX のコマンド・パッケージ・作法

コメントで頂いた情報を「2. 数式関係」に,使ってはいけないパッケージの自動チェックについての項を末尾に追記しました.(2013/10/12)

制御関係の学会では LaTeX というソフトで論文を書きます.LaTeX の歴史は古く,現代の水準で考えると設計し直すべきと思う部分も多々ありますが,世間で広く使われている Word の生産性が論文を書くという作業において今ひとつという事情も手伝ってか,現在に至るまでデファクトスタンダードの座を維持しています.

Wikipedia の記事によると $\LaTeX2e$ がリリースされたのは1993年,つまり20年前で,これ以降様々なパッケージによる拡張が行われています.現在(2013/03/11) CTAN には 4451 個  のパッケージが登録されているそうです.また,Web上にも色々なテクニックが蓄積され,大抵のことを実現する方法は検索すれば出てくる状況になっています.

しかし,その中には互換性の問題やより優れた代替が存在するために現在では使うべきでないものも相当数あります.
にそれらに関する情報はあるものの(これらも既に5年以上前の情報ですが…)日本語の情報が少ないせいか使うべきでないパッケージやコマンドを使っている学生さんをよく見かけるので,重要そうなものを,研究室内あるある順でまとめておきます.以下の内容はほとんど上記の記事の翻訳+まとめ+αになっています.

2013年2月7日木曜日

MATLAB で figure にフォーカスを奪われない方法

MATLAB で figure(2) のように figure 関数を実行すると Figure 2 のウィンドウにフォーカスが移行し,キーボード操作は Figure 2 のウィンドウが受け付けるようになります.若干再現性に欠けるところもありますが,仕様ではそうなっているようです.
通常はこれで問題ないのですが,長時間の計算を行っていて途中経過を図で表示している場合,別の作業をしている最中に邪魔をされて不便な場合があります.
この場合
figure(2)
のかわりに
set(0,'CurrentFigure',2)
とすれば Figure 2 が描画の対象になりますがキーボードのフォーカスは移動しません. ただし, Figure 2 が存在しない場合エラーになるので,うっかりウインドウを消してしまったときのために
try
  set(0,'CurrentFigure',figidx)
catch
  figure(figidx);
end
としておくとより安全だと思います.

2013年1月29日火曜日

Sublime Text 2 で LaTeX on Windows

2013/4/14 コメントでいただいた情報を追記


Sublime Text 2 とは?

Sublime Text 2 は最近巷で流行っている主にプログラムを書くためのエディターです.
僕はここ10年の殆どの期間 TeX 文書の編集に Emacs を利用しており,年に一度くらいの頻度で他のエディタを試しては Emacs に帰ってくるというのを繰り返していたのですが.Sublime Text 2 は大変使い心地が良く,今後も使い続けようと思うので TeX 編集環境の設定も含むインストール手順,その他もろもろをメモしておきます.