粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

Kicadを使ってコネクタ変換基板を作りたい(導入編)

いつか触ろうと思っていたKicadがどうも必要になったぽいので記事書きます。
現在未完。

回路作成ソフトについて

ユニバーサル基板で細々作るのもいいですが見た目の綺麗さや配線のめんどくささを加味すると回路作成ソフトに手を出す理由は十二分に存在します。
個人でも使えるプリント基板業者 - NAVER まとめ
今や基盤作成を外注して届けてくれるサービスも多々あるのでこれらと連携するイメージです。

自分の中では主に2種類が有名なのかなって思ってます。

EAGLE

言わずと知れたプリント基板作成ツール。小規模な方は無料で使用可。有料版もそんなに高くないらしい。
www.autodesk.co.jp

とりあえず3年無料っぽいですね。

Kicad

上記オープンソース版。
こちらは素子の制限などもないのでこっちで試してみようかと思います。

www.slideshare.net

作りたい物

3M社の100極コネクタからそれぞれ別々の信号線を取り出してDsub15ピンやBNCケーブルに出力したいです。
弊研究室では伝統的に空中配線とかユニバーサル基板を介して作成とかやってましたが100ピンは流石に無理&保守性を考えて基板実装を目指します。

必要物

Kicadをインストールしましょう。

素子の情報(フットプリントとか?)

一般的な素子はKicad内に既にデータがありますが,
一般的でない素子の場合は自分で作る必要があります。

作り方はこちら。
KiCadの回路記号&フットプリントを作る方法|一日体験!プロの基板作り|記事サポート | トランジスタ技術

ただ,既に有志が作ってくれている場合も多く,例えば僕の場合は探せば見つかりました。

102A0-6212PC - 3M - PCB Footprint & Symbol Download
f:id:ossyaritoori:20171214191313p:plain

やったぜ。

Library Loader からモデルをダウンロード

Library Loaderというソフトをダウンロードします。
f:id:ossyaritoori:20171214193514p:plain

PCB Library Modelの使い方

PCB Part Library 使い方 (KiCad編)
このサイトの流れに沿って行きます。

ただ,ここにあるようにCドライブの直下に作ると権限のないソフトがファイルを作成できなくなるので
Documentの何処かに SamacSysのLibフォルダを作ると良いです。

Kicad流れ

大まかにはこんな感じでしょうか。進んだら記事書きます。

  • 回路図作成 結線
  • 部品の配置
  • 自動配線
  • 指定の書式で出力

自動配線ツール

さて,下のような部品群になりましたが正直いちいち配線したくないです。
こういうのはプログラミングの出番でしょう?
f:id:ossyaritoori:20171214205000p:plain

ということで自動配線ツールが次のサイトで紹介されています。
kerikeri.top

MATLAB グラフの色をうまいこと調整する関数

MATLABのplot関数で作成した図の色にいつも困っているので関数作成。
デフォルトのr g b c m y などで決める色はいつも微妙に感じるのでそれらを変えてみようという試みです。

テスト用データ作成

これをプロットしていきます。

t = 0:0.01:3;
y = [sin(t);sin(t+0.1);sin(t+0.2);sin(t+0.3);sin(t+0.4);sin(t+0.5);sin(t+0.6);sin(t+0.7)];

Defaultカラー抽出

MATLABのデフォルトカラーはそこそこいい感じです。

https://jp.mathworks.com/matlabcentral/answers/160332-rgb-values-for-2014b-default-colors
次のコマンドでデフォルトカラーを確認できます。

get(groot,'DefaultAxesColorOrder')

先程のデータをプロットしましょう。
後ろの方は微妙ですが最初の4つくらいは普通に使える良い色合いだと思います。
RGB値は以下の通り。

         0    0.4470    0.7410    % 青
    0.8500    0.3250    0.0980 % 赤
    0.9290    0.6940    0.1250 % 山吹色
    0.4940    0.1840    0.5560 % 紫
    0.4660    0.6740    0.1880 % 緑
    0.3010    0.7450    0.9330 % シアン
    0.6350    0.0780    0.1840 % 茶色

どんな色がいいか?

さて,そのうちどのような色を用いればいいかですが,matlabの設定はまぁ悪くないかなぁと思っています。
青b,赤r,黄色y,後紫pは採用かなぁ。緑gはちょっと考えます。
f:id:ossyaritoori:20171202111501p:plain

あと,使えそうな色はオレンジoでしょうか。

どんな色がいいかとかは論文が幾つかありますがこんなの読んでいる場合じゃねぇ。
http://www.perceptualedge.com/articles/visual_business_intelligence/rules_for_using_color.pdf

色変更

plotする時にRGBで色を指定するには以下のように書けばよいですが,正直言ってこんなの絶対書きたくない。

plot(t,y,'Color',[1., 0.5, 0.])

一方で,Figureハンドルを入手していれば次のように代入形式で後付けで色を変更できます。
自動化が出来そうな兆しが見えてきましたね。

fig=plot(t,y)
fig(5).Color = [0,0.7,0]
fig(6).Color = [1., 0.5, 0.]

これで緑を強めにしてオレンジを追加しました。
f:id:ossyaritoori:20171202112555p:plain

後は関数化するだけや。
http://oxon.hatenablog.com/entries/2010/11/19

自動色つけ関数

仕様:グラフハンドルと色ハンドルを同時に渡してその色に対応するようにグラフを変えるsetfigcolor()関数を作成。

 setfigcolor(fig,'gbryo')

このように入れたい色を十番通り文字で指定すれば次のように変更可能ということ
f:id:ossyaritoori:20171202115439p:plain

なお,2つ目の色指定を全くしなければ関数内部で自動設定したデフォルトの色になります。

関数本体

function setfigcolor(hfig,colors,presetcolor)
glen = size(hfig,1);
colorcode = ['b';'r';'y';'p';'g';'o';'c';'k'];

if nargin == 2
    presetcolor =  [0    0.4470    0.7410;    % 青
    0.8500    0.3250    0.0980; % 赤
    0.9290    0.6940    0.1250; % 山吹色
    0.4940    0.1840    0.5560; % 紫
    0.4660    0.6740    0.1880; % 緑
    1.            0.5,         0.        ; % Orange
    0.6350    0.0780    0.1840; % chacole
    0             0             0]; %black
elseif nargin == 1
    presetcolor =  [0    0.4470    0.7410;    % 青
    0.8500    0.3250    0.0980; % 赤
    0.9290    0.6940    0.1250; % 山吹色
    0.4940    0.1840    0.5560; % 紫
    0.4660    0.6740    0.1880; % 緑
    1.            0.5,         0.        ; % Orange
    0.6350    0.0780    0.1840; % chacole
    0             0             0]; %black    
    colors = colorcode';
end
len=length(colors);


% set colors
for i=1:min(glen,len)
    n = find(colorcode==  colors(i));
    hfig(i).Color = presetcolor(n,:);
end

end

USB英字キーボードを英語配列へと変更

HHKBのLite2を買いました。

PFU Happy Hacking Keyboard Lite2 英語配列 USBキーボード ブラック PD-KB200B/U

PFU Happy Hacking Keyboard Lite2 英語配列 USBキーボード ブラック PD-KB200B/U

これです。

思ったよりずっしり重いですがうち心地はとても良いです。キーが少ないのも英字配列にしている限りは気にならないです。

英字配列キーボードとして認識

Windowsにそのまま挿すと日本語配列として認識されるので幾つか物理的に召喚できないキーが生じます。
¥とか打てないのでTexでもTerminalでも困りまくるため英字配列として読み込みます。

ここを参照して直しましょう。
d.hatena.ne.jp

f:id:ossyaritoori:20171130202422p:plain

変更箇所
f:id:ossyaritoori:20171130202534p:plain
f:id:ossyaritoori:20171130202617p:plain

この後再起動。

Delete キー交換

流石にBackSpaceを多用するのでDeleteKeyには引っ込んでもらいました。
タイプミスが減ったらもとに戻すのを考えます。

MATLAB 位相遅れなし微分 (4次精度)

メモ。

導出はTaylor展開してtにh,2hを代入して解きます。


4次精度の微分はこう。

(f(x - 2h) - 8 f(x - h) + 8 f(x + h) - f(x + 2h))/(12h) + O(h⁴)

function V = deriv4(Etime,Epos)
em2 = Epos(1:end-4);
em1= Epos(2:end-3);
%Epos(3:end-2)
ep1 = Epos(4:end-1);
ep2 = Epos(5:end);

V = ( 2/3*(ep1-em1)+1/12*(em2-ep2))/(Etime(2)-Etime(1));
end

jetson TX2 のセットアップ

私費で買いました。公費とか研究費でお願いしても良かったのですが,
学生だと安く手に入るしこの際私物に買っちゃおうと思って買いました。Switchを買う資金が消えました。

最小セットアップ

必要と思われる周辺環境

  • HDMI入力を受け付けるディスプレイ
  • マウス,キーボード
  • USBハブ
  • 箱(むき出しは怖いため)

特に注意するのがディスプレイまわり。
jetsonの出力はHDMIのみなのでHDMI入力を受け付けるディスプレイが必要です。
また,HDMI出力はそれほどパワーが無いので質の悪いケーブルや変換ケーブルは出力ができないという問題を抱えている場合があります。
変換ケーブルを使う場合は外部電源で信号強度を増幅できるものにすると良いでしょう。

箱は入っていたダンボール箱とクリアファイルで改造してなんとかしました 。
一応電子部品が詰まっているのでむき出しは辞めておいた方がいいでしょう。

ぼくのかんがえたさいきょうのかんきょう

据え置きで使わない場合ポータブルディスプレイが良いです。この場合電源はUSB規格の5Vで駆動できるかバッテリー駆動ができるとかなり重宝するでしょう。
Diginnos DG-NP09D 8.9インチ バッテリー内蔵モバイルモニター 最新ファーム適用モデル
コスパ的にこれがほしいです。

AOC 15.6インチ USB接続 モニター ( 1366 x 768 / TN / 8ms ) E1659FWU-GP4R
USBバスパワーならこいつ。

TechRise金メッキ高速1080P HDMI オス to VGAメスビデオ変換アダプタケーブル オーディオとマイクロUSBケーブル付き
ケーブルは外部電源を使用可能に。

TX2を入手してすぐすること

電源に繋いで電源を着けます。
しばらくコマンドが流れた後,ターミナルのような初期画面に移行します。
表示の通りに次のコマンドを順次貼り付けていきましょう。

 cd NVIDIA-INSTALLER
 sudo ./installer.sh
 sudo reboot

しばらくしてUbuntuGUIが起動します。ID/Passはどちらもnvidiaです。
IDとPASSがデフォルトのままでは非常に危険なのでネットには繋がない方が良いでしょう。

この時点でUbuntuのOSはキチンと入っていますので強いラズベリーパイとしての最低限の動作はします。

GPUボードとしての動作をするための準備

まずは公式の手順をきちんと確認しましょう。
NVIDIA JetPack Documentation

まぁだいたいここの通りに動くつもりです。
JetsonTX2初期セットアップ(Jetpack)からサンプルのコンパイルまでの手順 - Qiita

JetPackのインストール等

省略。

  • Ubuntuの入ったPCを用意 Or VMで仮想環境を建てる
  • Jetpackをダウンロード(要NVIDIAへの会員登録(?))

Jetpackを起動

chmod +xを用いてスクリプトを実行可能にします。
ダブルクリックするとエディタが起動して面倒なので気をつけて。

 chmod +x JetPack-L4T-3.1-linux-x64.run
./JetPack-L4T-3.1-linux-x64.run

途中までぽちぽちすすめていきます。

OSをflashする場合

今回はFlashing OSの設定を変更せずに行いました。

途中でインストール方法の2択を迫られます。私は前者を選択しました。
http://docs.nvidia.com/jetpack-l4t/content/developertools/mobile/jetpack/images/jetpack_l4t_network_layout.004_800x587.png

次に,以下の画面が出ます。これはjetsonと同じネットワークに乗っているデバイスを選ぶ必要があります。
ifconfigを打って確かめましょう。
f:id:ossyaritoori:20171124205014p:plain

その後順調に進めれば次のような画面に行き着くはずです。
http://docs.nvidia.com/jetpack-l4t/content/developertools/mobile/jetpack/images/jetpack_l4t_force_recovery_mode.001_701x425.png

ここで付属のUSB-MicroUSB変換ケーブルを用います。
1. Jetson本体の電源を落とし,電源プラグも抜く。
2. USB-MicroUSBを接続する。
3. 電源を入れ,リカバリーモードにするため電源ボタンまわりで特殊な操作を行う。
リカバリー動作は

〇〇〇◎ 電源ボタンを押す。
◎〇◎〇 リカバリーボタンを押しながらリセットボタンを2秒押す。
〇〇◎〇 リセットボタンを離し,
〇〇〇〇 リカバリーボタンも離す。

4. USBが繋がっているUbuntu側でlsusbを打ってNvidia CorpとしてJetsonTX2が認識されていることを確認。
5. 先程の黒いターミナル画面へ行きEnter。Jetsonが起動する。(ケーブルは抜かない!!)



全体で5分に満たないです。
最終的に

Finished Flasing OS
Determining the IP address of target...

と出ればOSの更新は完了です。計3GBくらいです。

ただ,この後のインストールがうまく行かなかったのでSecond Challengeが必要でした。
一旦プログラムをCtrl+Cで停止させます。

OSをflashしない場合(2回目)

OSに変更を加えず?にインストールを行う場合は以下の手順に従うのが良いでしょう。
NVIDIA Jetson TX2を買ったのでセットアップ - パン屋になりたい

以下の画面を選択するときにFlashing OSという箇所を「no action」へと変更します。
http://docs.nvidia.com/jetpack-l4t/content/developertools/mobile/jetpack/images/jetpack_l4t_component_mgr.005_800x697.png

すると,次の様にIPとユーザ名等を求められます。
http://docs.nvidia.com/jetpack-l4t/content/developertools/mobile/jetpack/images/jetpack_l4t_device_info.004_800x587.png

ifconfigで調べて実行しましょう。

接続が完了したら後は放置です。ケーブルはOSを入れるときだけっぽいので抜いてもいいんでしょうが,通信が始まっているときに抜く自信がなくて結局つなぎっぱにしました。

反省

VisionWorksというソフトをインストールする設定をcheckしたためインストールに長い時間をかけすぎました。大体2時間強かかっています。
VisionWorks | NVIDIA Developer

みてみたところそんなに必須でもなさそうなので要領の限られているJetsonではこういう不要なパッケージは削除してよかったでしょう。
トータルで10.5GB/27GB うーんキツイ。

この後,ROS周りで2Gくらい,OpenCV3.Xの実行ファイル群で1G,カーネルコンパイルで1G~は最低で食うので本当に余裕がないですね。
評価ボードから外さない用途ならSSDを買ってきてその上にもう一度環境構築しても良さそうです。

カーネルの変更

Lidarセンサの為にカーネルの変更を後で試そうと思います。
こういう重大な変更は先にやっておくにこしたことないでしょう。
ossyaritoori.hatenablog.com

RPlidarを用いるために,
CP210xまたはC2102ドライバを入れます。
その他のドライバに関しては動画になんとなく沿って入れているので必須か?と言われるとそうじゃなさそう。

有志のツールを用いてカーネル修正

2017年11月現在ではTegra 28が最新ですので以下のページに準拠します。
Build Kernel and ttyACM Module - NVIDIA Jetson TX2 - JetsonHacks

初めてやる方は「必ずYoutubeの動画を見ながら」作業しましょう。
英語を読まずに適当にコマンドだけホイホイ入力しても意味が無いので。

ダウンロードとconfigの変更

git clone https://github.com/jetsonhacks/buildJetsonTX2Kernel.git
cd buildJetsonTX2Kernel
./getKernelSources.sh

この後,次のような画面が開きます。
[:w=500]
ここで追加モジュールを選択してチェックを入れます。

1つ目

「General Setup」から「Local version」をダブルクリック

  • jetsonbot-v0.1と入力。
2つ目

左上のEditから検索窓を呼ぶ。
ACM」と検索して出て来る「ACM USB Modern Support」的なことが書いてあるものにチェックを入れる。

3つ目

同様に検索窓で「CH341」を検索。
出て来るものにチェックを入れる。

4つ目

CP210xのドライバを入れます。
同様です。

カーネルのmakeとコピー

その後選択したカーネルコンパイルするために

./makeKernel.sh

と打ってしばらく待ちます。長いです。

終わった後に

./copyImage.sh

とうってmakeしたファイルを適当なファイルへとコピーします。

なお,この行程で追加で5GBくらいの容量を食います。うげぇ。

/usr/src以下にこれに使ったソースがあるので適宜削除していいそうな。

/usr/src/kernel/kernel4-4
と/usr/src/sources等を他のUSBに移しました。

これで3GB くらい節約できます。

再起動

最後にRebootして完了です。お疲れ様でした。

次はいつかの手順に則ってROSを入れます。
ossyaritoori.hatenablog.com


パスワード変更

sudo passwd
で管理者のパスワードを変更可能です。
私はよく使うアレにしました。(メモ。本当はよくないがデフォルトよりマシでしょう)
Rebootしたらこの設定は消え失せました。デフォルトのpassから変更できないようです。
https://devtalk.nvidia.com/default/topic/1017208/jetson-tx2-password/?offset=1

カルマンフィルタの推定値の信頼区間を書く

カルマンフィルタから信頼区間の線を引きたいというのは当然の要求だと思うのですが見渡す限り 良さげな文献が無いので自分で書きます。 書いておいて何ですが自信がないので訂正等のご意見を随時求めております。

あと,ブログの本文もMarkdownにシフトしてみました。
[tex: ]ってうつのめんどくさいな。

理論

参考文献

きちんとした参考文献を見つけられずに困ってます。 一番まともそうなのがStackOverflowしかないんだけど… python - Estimating confidence intervals around Kalman filter - Stack Overflow

あと,確率論とかについては以下の本を。

確率ロボティクス (プレミアムブックス版)

確率ロボティクス (プレミアムブックス版)

足立先生の本も良著なのでオススメ。
カルマンフィルタの基礎

カルマンフィルタの基礎

追記:それっぽい論文見つけました1966年の論文です。 Confidence, Prediction, and Tolerance Regions for the Multivariate Normal Distribution on JSTOR

カルマンフィルタにおける信頼区間とは

まずは信頼区間についてwikiで確認してください。 信頼区間 - Wikipedia

以下の図のように分布の形状と平均分散などの値がわかっていれば値がどの確率でどの範囲に収まっているかがわかります。 こういうやつ

カルマンフィルタでは誤差にガウス分布を仮定しており,我々がフィルタで推定する推定値Xはこの分布の平均値でした。 また,この際同時に誤差共分散行列Pも求められるので推定値の不確かさも同時に推定できます。

従ってこれらの情報からある値の範囲に真値がN%の確率で存在するだろうということがわかります。

n次の状態変数における信頼区間

追記:上記の論文から記述を引っ張ってきました。 f:id:ossyaritoori:20171121163838p:plain

さっくり要約すると推定値\bar{x}と推定共分散行列Pに対して,αの信頼区間を示す楕円は次のように計算できるというものです。
 (x-\bar{x})^\top P^{-1} (x-\bar{x}) = \chi ^2 (1-\alpha,n)

カイ二乗分布で検定できるんですね。 カイ二乗分布 - Wikipedia

別解:シグマ区間からの拡張

StackOverflowの記述によると以下の方程式を解くことでベクトルxに対する1シグマの区間を計算できます。 これの出典が知りたい…

(x-\bar{x})^\top P^{-1} (x-\bar{x}) = 1 ここから1σ区間を推定してカイ二乗分布から何σ分の信頼区間が必要になるのかを推定して何倍かすれば求まるでしょう。

Matlabによる実装1

とりあえず,論文にあった手法を実装してみましょう。SymbolicMath ToolBoxが必要になります。

カイ二乗分布の境界値

要は \chi ^2 (1-\alpha,n)を計算します。 一応以下のような表があるのですが,matlabではchi2inv(α,n)という関数が用意されています。 付表:カイ2乗分布表 chi-square distribution — 中川雅央(滋賀大学) カイ二乗逆累積分布関数と言うらしいですね。 試しに,2自由度の95%信頼区間が何σ必要かという話では

chi2inv(0.95,2)

とうつと5.9915と計算できます。

統計の授業でやる1自由度の時の1σ区間に68.27%のデータが入っているという話は chi2inv(0.6827,1)=1という結果から確認できます。 注意として1自由度の時の2σ区間には95.5%の値が入っていますが chi2inv(0.955,1)=4.0186の結果からわかるように 逆累積分布関数から計算されるのは区間の大きさの2乗です。(用語が不明瞭)

Symbolic Math Toolboxを用いた代数方程式の解法

MATLABのStudentにデフォルトで入っているSymbolicMathToolboxを使えば次のような式はいとも簡単に解くことが可能です。 2自由度までならせいぜい扁平な楕円なので頑張って手計算するというのも良いかもしれませんが。  (x-\bar{x})^\top P^{-1} (x-\bar{x}) = \chi ^2 (1-\alpha,n)

具体的な例で行きましょう。

% Set Value
Xhat = [1;2]
Phat =[1 0.5;0.5 2]

% Get dimension
Dim = size(Xhat,1);
alpha = 0.95;
bound = chi2inv(alpha,Dim);

% Set symbolic equation
X = sym('x',[Dim 1]);
equation = (X-Xhat).'*inv(Phat) *(X-Xhat) == bound

% Plot Function
ezplot(equation)
hold on 
plot(Xhat(1),Xhat(2),'r+')
grid on

今回得た知見として,ezplotを用いることでEquationをplotできるのが簡単で良さげです。 f:id:ossyaritoori:20171121173519p:plain

SLAMなどではこのまま楕円の範囲が位置推定の信頼区間になるのでいいですが,カルマンフィルタの状態推定の場合各状態の変位の範囲が知りたいわけなので, 以下の青線の範囲が知りたいわけです。 f:id:ossyaritoori:20171121174056p:plain

これは先程のEquationに状態変数の値を代入して解くことで達成されて,

Eq1 = subs(equation,X(2),Xhat(2));
Eq2 = subs(equation,X(1),Xhat(1));

Ans1=double(solve(Eq1));
Ans2=double(solve(Eq2));

結果,次のようになります。これが知りたかった95%信頼区間の下界と上界です。

Ans1 =

   -1.2897
    3.2897

Ans2 =

   -1.2381
    5.2381

実は,結局ある状態変数の信頼区間の上界下界の計算に必要なのは共分散行列の逆行列のi行i列目の成分だけなのです。 もっと言うと,共分散行列の逆行列の逆数の値がその推定値の標準偏差になるってところでしょうか。

MATLAB関数として実装

関数として書こうと思ったんですが先程の流れをそのまま関数にすると結構重いものが出来上がります。 とりあえずConfidenceInterval.m関数を作成しました。

実際に適用すると例えばこんな感じ。正直大げさなくらいの範囲が求まります。 f:id:ossyaritoori:20171121223208p:plain

引数は推定値,共分散行列,信頼区間(デフォルト値95%)です。 要望やバグがあればブラッシュアップします。

追記&最終版:実は超簡単

上記の関数は問題をややこしく解いています。 楕円を書かなくても良い場合,実は問題は超簡単で 以下の数式を解けば良いことになります。 f:id:ossyaritoori:20171121232247p:plain

おそらく改善の余地がないのでこれを最終版とします,

% Author: Yoshi Ri @ The Univ of Tokyo 
% Date : Nov 2017
% Get ConfidenceInterval of 

function [Xmax ,Xmin]= ConfidenceInterval(Xhat,Phat,p)
% Xhat : Estimated State, Phat : Estimated Covariance, p : percentage of
% prediction

if nargin==2
p=0.95;
%print('set default p=95%!')
end

% Get dimension
Dim = size(Xhat,1);
alpha = p;
bound = chi2inv(alpha,Dim);

% Set symbolic equation
Pinv= inv(Phat);

% Get upper and lower boundary
Xmax=zeros(size(Xhat));
Xmin=zeros(size(Xhat));
for i=1:Dim
    Xmin(i)=Xhat(i)- sqrt(bound/Pinv(i,i));
    Xmax(i)=Xhat(i)+ sqrt(bound/Pinv(i,i));
end

end

疑問点

そもそも筆者は検定とか統計とかふわふわした知識でやっているので, 強マンによる本質的な記事の矯正が必要です。

心が折れない程度に指摘してください。

VisualStudio Codeでマークダウン & Texを書く

VScode結構軽快And綺麗ということで使いはじめているのでメモ。
Markdownはかなり書いていて気持ちが良いです。

VScodeについて

軽快かつ様々なExtensionを組み込める自由度の高いエディタ。
見た目も良い感じ。

VScodeMarkdown

数式以外は軽快アンド快適なので,今後も使用する予定。

使用する拡張機能

f:id:ossyaritoori:20171114212614p:plain

基本設定

画像を貼るPasteImageではCtrl+Alt+Vで画像を貼りますがこれには予め他のTex関係の他のコマンドが設定されているため,
そこでエラーが出てうまくいきません。基本設定のところから割当てを変更するかしましょう。

Markdown機能の改善・知りたいこと

数式マクロを組めない問題

数式でマクロを使いたいんですが以下のようなものを使えば出来るのはわかっているんですけど
macros - Visual Studio Marketplace
面倒。
こんな感じに書きたいのだけれど…
ossyaritoori.hatenablog.com

追記:KaTexにおけるマクロ定義について

Markdown+Math]のパッケージではKaTexを用いています。
これはStackEditやQiita等が用いるMathJaxとは異なり \newcommandなどのコードが使えないという仕様です。

従ってMacroを書く場合はPCの何処かにあるKatexの設定に以下のように書く必要があるそうな。めんど。
add support for macros via \def and \newcommand · Issue #250 · Khan/KaTeX · GitHub

追記2:MathJaxを使うには

以下のパッチを当てればMathjaxを使えるかと。その場合,恐らくプリアンブルは上手く書けると思います。
#vscode Visual Studio Codeのmarkdownでmathjaxを使えるようにするパッチ(仮) · GitHub

pandocを介したPDF化

PDF化するときの問題に,MarkdownPDFはプレビューではなく,そのまま印刷する傾向にあります。
つまり折角数式をきれいに書いてもうまいこと変換をしてくれたりはしないのです。

必要となるものは以下の2つです。

[Visual Studio Code][Windows] MarkdownでPDF/HTML/DOCXファイルへの変換方法とチートシート | Gabekore Garage


VScodeplatexコンパイル

基本的にはTexstudioで書くが,使ってみたかんじそんなに悪くないので乗り換えも検討中。
TexStudioとの違いはLatex Workshopの拡張機能を使うことにより文章の保存とコンパイル,表示を同時に行う点。

使用する拡張機能

  • Latex Language Support:言語サポート。これがないと日本語を満足に打てない。
  • Latex WorkShop:文法に関する知識を入れ込んでいる。ハイライトやエラー検出のお供に。

f:id:ossyaritoori:20171114211852p:plain

他にも便利なのがあったら追加予定。

最低限の基本設定

latexを書いて,コンパイルコマンドプロンプトに投げているのでTexStudioとやっていることは同じです。

流れは以下の通りなのでこれを自動化するようにすれば良いです。

「基本設定」→「設定」で次のように書いちゃいましょう。

{
  "latex-workshop.latex.toolchain": [
    {
        "command": "platex",
        "args": [
            "-synctex=1",
            "-interaction=nonstopmode",
            "-file-line-error",
            "-jobname=\"%DOCFILE%\"",
            "-kanji=utf8",
            "-guess-input-enc",
            "%DOCFILE%.tex"
        ]
    },
    {
        "command": "pbibtex",
        "args": [
            "%DOCFILE%"
        ]
    },
    {
        "command": "platex",
        "args": [
            "-synctex=1",
            "-interaction=nonstopmode",
            "-file-line-error",
            "-jobname=\"%DOCFILE%\"",
            "-kanji=utf8",
            "-guess-input-enc",
            "%DOCFILE%.tex"
        ]
    },
    {
        "command": "platex",
        "args": [
            "-synctex=1",
            "-interaction=nonstopmode",
            "-file-line-error",
            "-jobname=\"%DOCFILE%\"",
            "-kanji=utf8",
            "-guess-input-enc",
            "%DOCFILE%.tex"
        ]
    },
    {
        "command": "dvipdfmx",
        "args": [
            "-f",
            "yu-win10.map",
            "%DOCFILE%"
        ]
    }
  ]
}

注意:bibtexを使わない場合はエラーが出るので上2つをコメントアウトしてしまった方が安全かもしれません。
注意2:bibtexで引用を一切しない場合もエラーが出ます。なんか適当に引用しておきましょう。

追記:latexmkでjarticleがコンパイル出来ない問題。

まだぶち当たっていないのですがこういうこともあるらしいぞと。
タイプセットツールをptex2pdfに変更。
VS CodeでTeXを使う方法 - elechoのぶろぐ

"latex-workshop.latex.toolchain": [{
    "command": "ptex2pdf",
    "args": [
        "-l",
        "-ot",
        "-kanji=utf8 -synctex=1",
        "%DOC%"
    ]
}],