#概要
物理学系で, LaTeX入力の労力が占める割合が高いことで悪名高いレポートがある.
(自分だけでも)なんとかならんかなと色々調べてみたら, Arduinoがキーボードになるらしいとわかったのでテストしてみた.
LaTeXで過去にやったこと
- コピペテンプレを置いておく
- Windows10の仮想デスクトップ + 3本指横スライドで颯爽と切り替えしたるで
- メモ帳でもいいで
- ちょっと手間
- 長さによっては生入力とあまり時間が変わらない
- IME辞書
- しばらく使ってきた方法
- けど"\frac{}{}"とかを入力した後{}の中にカーソルが自動で入るといいな...
- 英字とかなの切り替えが面倒
- 数式内では英字をよく使うのにその途中でIMEオン/オフにしないといけない
- Windows10のCtrl + Shift + [キー]でカスタマイズできるショートカット + VBS
- ショートカットを生成→デスクトップに置く→カスタマイズ という順番でやらなければいけない
- そもそも押しづらい
- JScript? JavaScriptじゃないの?
- さっきの{}の中にカーソルを入れるのはできそうだ
今回最終的につかったもの
- Arduino Leonald
- USBキーボードエミュレーションKeyboardライブラリの亜種
- 電子部品
- ブレッドボード
- タクトスイッチ
- 3.3kΩ 抵抗
- ジャンパー線
手順
- 先述のリンクからソースをコピーしてKeyboard_jp.hとKeyboard_jp.cppをArduino/libraries/Keyboard_jp/に作成
- 以下のスケッチを作成
sketch_oct30b.ino
#include "Keyboard_jp.h"
int prev = LOW;
int now = LOW;
int pin = 7;
void frac(){
char str[10] = "\\frac{}{}";
for(int i = 0; i < 10; i++){
Keyboard.write(str[i]);
}
for(int i = 0; i < 3;i++){
Keyboard.write(KEY_LEFT_ARROW);
}
}
void setup() {
// put your setup code here, to run once:
pinMode(pin, INPUT);
Keyboard.begin();
delay(1000);
}
void loop() {
// put your main code here, to run repeatedly:
now = digitalRead(pin);
if(prev == LOW && now == HIGH){
frac();
}
prev = now;
}
- 配線
- スケッチを実行
- タクトスイッチを押すと現在のカーソルの位置に"\frac{}{}"と入力され, カーソルは一つ目の{}の間に入る
やっていること
タクトスイッチを押すと"\frac{}{}"の文字列を順番にタイプしたのと同じ信号がArduinoからコンピュータに送られる.
問題点
- ハードを作らないといけない
- しかしそれがよい
- キースイッチとキーカバーを買ってキーボードを作ったら楽しそう
- カスタマイズするにはArduinoに書き込まなければならない
- VBSとは違って既に入力された情報を取得できないから, かねてから考えていた{}の間同士をジャンプするなどのソフトウェアを使った技巧ができない
苦労したこと
Keyboard.h/cppを使えることが分かったときは飛び上がるほどうれしかったが, ""が入力できなくてキレた.
(Keyboard_jp.h/cppを作成されたtoshi-uさん, ありがとうございます.)
今後
自分でキーボードを作れるのは楽しそうだからLaTeXコマンドのうち汎用的なものを選び出して作りたい.