めも

主にUnity

ネットオフのタダ本は得?

問題点:送料がかかること。

  • タダ本MAXは483円-15冊/月。
  • 送料440円。1500円以上の買い物で無料。
  • 会計ごとに42円かかる。
  • 商品代金の10~15%割引を時々行っている。これはタダ本付属クーポンのほぼ上位互換であるため、タダ本の特典内容について考える必要はない。

  • 110円の本を15冊買う場合、タダ本なら$483+440+42=965$円。タダ本でなければ$110\cdot15\cdot(1-0.1)+42=1527$円。

  • 110円の本を29冊買う場合、タダ本なら$483+110\cdot14\cdot(1-0.15)+42=483+1309+42=1834$円。タダ本でなければ$110\cdot29\cdot(1-0.15)+42=2754$円。
  • 損益分岐点は、$923/110=8.4$冊、つまり月に8冊以上の本が本当に欲しいかどうかによる。

  • 意外と対象外の本が多く、セットも対象外であるため、イライラする。

  • 自動継続のため注意。

VR180カメラで写真が撮りたい!

注: カメラ初心者です。間違いがあったらすみません。

基礎知識

IPD

  • IPD(Interpupillary Distance)にはNear IPD(NIPD)とFar IPD(FIPD)があり、両者は3mm程度差がある。1 VRでは恐らくFIPDを使う。
  • 人間のIPDは国内の統計によれば18~34歳で64.1±3.0mm2であり、海外の統計によれば20代あたりまでは年齢とともに増加するようである。

3

4

5

カメラ

カメラのセンサーサイズ

6

幾何光学?

  • 曲率一定の曲面による反射

7

$$ n_{1} \sin \theta = n_{2} \sin \theta \iff n_{1}(\alpha + \theta) \approx n_{2}(\phi - \beta), \alpha \approx \frac{h}{u_{o}}, \beta \approx \frac{h}{u_{i}}, \phi \approx \frac{h}{R} $$ より $$ \frac{n_{1}}{u_{o}} + \frac{n_{2}}{u_{i}} = \frac{n_{2}-n_{1}}{R} $$

入射側,透過側の曲率(curvature)を$R_1,R_2$とし、$u$: 被写体距離, $u'$: 入射側より先の屈折率が$n$であったとしたときの焦点距離(thin lens approximation), $u_{o}$: 焦点距離とし、($(u,u',1,n),(u',u_{o},n,1)$に対して上式を2度使い$u'$を消去すれば、以下の式が得られる。 ガウスのレンズ公式 証明 - あなばブログ

  • レンズメーカーの式(lensmaker's equation)

$$ \frac{1}{f} = (n-1)\left(\frac{1}{R_{1}} - \frac{1}{R_{2}} + \frac{(n-1)d}{nR_{1}R_{2}}\right) $$

  • レンズの公式(thin lens formula)

$$ \frac{1}{f} = \frac{1}{u_{o}} + \frac{1}{u} $$

「全群繰り出し」「フロントフォーカス」「リアフォーカス」「インナーフォーカス」の4種類がある。8「全群繰り出し」は焦点距離が不変だが、その他は被写体距離に応じて焦点距離が変わる。これを「ブリージング」という。^focus-type-3

$F$: カメラレンズの焦点距離表示,

$$ f = \begin{cases}F & \text{全群繰り出し} \\ F (1 + \frac{u_{o}}{u}) & \text{otherwise}\end{cases} $$

$f$: 焦点距離(focal length), $N$: F値(f-number), $D$: 有効口径(直径)(effective aperture)

$$ N = \frac{f}{D} $$

  • 画角

画角は像側、被写体画角は物体側の角度によって決まる。

$\alpha$: 画角(angle of view, AOV), $alpha_\infty$: 無限遠画角, $d$: 指定方向のセンサーサイズ

$$ \alpha = 2 \tan^{-1} \frac{d}{2f(1 + \frac{u}{v})} \left( \to_{u \to \infty} 2 \tan^{-1} \frac{d}{2f(1 + \frac{v}{u})} \approx \frac{f}{d} \right) $$

$\alpha'$: 被写体画角, $h$: 被写体サイズ

$$ \alpha' \approx \frac{h}{d\frac{u}{v}} = \frac{hf(1 + \frac{v}{u})}{du} \approx \frac{hf}{du} ( u \to \infty ) $$

  • ボケ(bokeh)

$(u,v,f)$がレンズの式を満たしている状態で、$v'$を焦点にもつ被写体距離$u'$の被写体の$v$における錯乱円直径(circle of confusion, COC)$c$を求めたい。相似を考えて

$$ \frac{c}{D} = \begin{cases}\frac{v - v'}{v'} & v' < v \\ \frac{v' - v}{v'} & v' > v\end{cases} = \frac{|v-v'|}{v'} $$

$$ \frac{1}{f} = \frac{1}{u'} + \frac{1}{v'} $$

$v'$を削除すると以下のようになるらしい。

$$ u'_{\mp} = \frac{uf^{2}}{f^{2} \pm \frac{f}{D}c (s - f)} $$

9 ここで錯乱円画角(独自用語)は

$$ \gamma = \frac{c}{d} $$

複数の被写体をボケずに写せるかどうかを調べたい。

$DOF$: 被写界深度(depth of field, DOF), $u$: 被写体距離(distance to subject) $$ \mathrm{DOF} = u'_{+} - u'_{-} = \frac{uf^{2}}{f^{2} - \frac{f}{D}c (s - f)} - \frac{uf^{2}}{f^{2} + \frac{f}{D}c (s - f)} = \frac{2f^{2}Ncu(u-f)}{f^{4}-N^{2}c^{2}(u-f)^{2}} \approx c \frac{u^{2}}{fD} $$ 10

背景ボケを調べたい。 $b$: 背景錯乱円直径(background blur disk radius) $$ b = \lim_{u' \to \infty} \frac{f^{2} - \frac{uf^{2}}{u'}}{\frac{f}{D}(u - f)} = \frac{fD}{u-f} \approx \frac{cu^{2}}{\mathrm{DOF}(u-f)} \approx \frac{fD}{u} $$

  • 光量

$H$: 光量, $T$: レンズ透過率, $L$: シーン輝度, $v(\theta)$: ケラレ係数

$$ H = \frac{qLt}{N^{2}} = \frac{qLtD^{2}}{f^{2}}, q = \frac{\pi}{4}T v(\theta) \cos^{4} \theta $$ 11

12

n倍するもの 被写体の占める画角 背景の占める画角 1センサー当たり明るさ 被写界深度 背景ボケ ノイズ
センサーサイズ 1/n 1/n 1 n 1/n 1
センサー画素密度 1 1 1/n2 1 1 1
有効口径(レンズ固定時のF値の逆数) 1 1 n2 1/n n 1
焦点距離 n n 1/n2 1/n n 1
シャッタースピード 1 1 n 1 1 1
ISO感度 1 1 n 1 1 n
レンズ透過率(NDフィルター) 1 1 n 1 1 1
輝度(ストロボ) 1 1 被写体のみn 1 1 1
被写体との距離 1/n 1 1 n2 1/n 1

帰結

要するに1つのパラメータを変えて、他のパラメータを変更することにより元通りの写真が撮れるかを検討したいわけである。 これらの値を$\log_n$したものによるベクトルの(部分)集合が張る$\mathbb{R}^n$上の部分空間で線形代数ごっこをすると(別に線形代数を持ち出さなくても良いが)いくつかの結論が得られる。

  • センサーサイズを小さくすると、被写体に近づいて[圧縮効果減少(かつ遠近歪み)]を起こすか、焦点距離を下げて[被写界深度の上昇(=背景ボケの低下)]を起こさなければならない。更に同じ解像度を用いる場合、センサー画素密度が上がるため、1センサー当たり明るさを上げる必要があり、これ以上レンズ透過率・シャッタースピードを上げられない場合、[ノイズの上昇]が起こる。
  • ストロボは被写体の明るさと背景の明るさの比を変えるための唯一のパラメータである。
  • 明るさを変えるためのパラメータがとても多い。

人物撮影における変数決定の手順(要出典)

決めるもの 調節するもの
光の柔らかさ ディフューザー
HSS(後述)を避けたい シャッタースピードを1/100にする
被写体の画角 焦点距離
背景が邪魔か/人数 絞り
背景の明るさ ISO感度,NDフィルター
人物の明るさ ストロボ

作り方

既製品or自作, カメラorアクションカメラで4通りに大別できる。

魚眼レンズ

  • VR180写真を撮るには、レンズは周囲180度の光を映す必要がある。このような魚眼レンズを特に円周魚眼レンズ/全周魚眼レンズと呼ぶらしい。
  • 魚眼レンズには複数の種類があるが13、一部の例外を除き、APS-Cサイズであれば焦点距離が4.2-5.9mm(以下), フルサイズであれば焦点距離が6.0-8.5mm(以下)であることが円周魚眼レンズであるための必要条件である。14
  • 円周魚眼レンズはかなりマイナーである。
  • APS-C用対角魚眼レンズをフルサイズセンサーカメラに取り付ける方法もある。
    • 境界付近に「ケラレ」が発生する可能性がある。15

16

  • 但し、上手く行った例もある。

17

MFT用Samyang 7.5mm f3.5 + Eマウント変換キット + α7R III

Samyang 8mm f3.5 fisheye + α99では上下が少し途切れるらしい。[^fisheye-3]

要件

順に絞り込んでいこう。

レンズマウント

  • 2つのカメラを傾けて撮影することも可能だが、不格好である。実用的には、2つのカメラ間のマウント厚を3mmとして、レンズの中心点とカメラの上面/底面との距離が(64 - 3)/2=30.5mm程度以下であることが必要。(無理やりテープでくっつけるならば、32mm以下であることが必要。)
  • レンズマウントの直径は少なくとも60mm程度以下でなければならない。しかし、普通は内径のほうが興味の対象であり、外径に関する情報があまりないが、部分的にまとめた方がいらっしゃった
カメラのキタムラで数が多い順18 外径19 内径[^mount] 可否
マイクロフォーサーズ(MFT/M4/3) 52 40 o
キャノン RF 69?20 54 x
ソニー FE=ソニー E 58 46 o
キャノン EF-M 58 47 o
フジフィルム X 55 43.5 o
ニコン Z 65.421 (但し黒い樹脂?部分を含めると75程度ありそう?) 55 x
ニコン 1 - 36 ちっさ
フジフィルム G - 65 x
ペンタックス Q - 29 ちっさ
  • SONY FEレンズのFはフルサイズのFであるため、当然フルサイズのものがある。α7cなどは非常にコンパクトに見える。(高い!!!)
  • キャノン EF-Mマウントのものは基本的にAPS-Cであると思われる。(フルサイズがあるかは不明。)
  • フジフィルム Xのものも基本的にAPS-Cであると思われる。(こちらも不明。)
  • マイクロフォーサーズは名前通りマイクロフォーサーズのみであると思われる。
  • ニコン 1は名前通り1型センサーを使っている。

ということで、SONY α7シリーズを使わない場合、APS-Cマイクロフォーサーズを使うことになると思われる。

α7 (60k)はぎりぎり使えるか?

α7は三脚用の穴が光軸のちょうど下にあるため、うまくいけばカメラ間の距離を0mmにできそうな気がする。 しかし、長さを測ってみたところ、上記の「外径」は金色の縁を含んでおらず、中心部から底面への距離は23+12.5mm程度あり、どうしてもレンズ間距離は71mm以上となってしまう。$\frac{71}{64}\approx 1.11$。これをどう見るかである。

https://eleif.net/photomeasure

α7c (とても高い)は使えるか?

金色の縁を含むと61mm程度となると思われる。 上面と金色の縁の間は2mm程度に見えるため、レンズ間距離65mmを達成できるが、アクセサリーシューが使用不能となってしまう。

カメラを傾ける?

魚眼レンズの主点(nodal point)は角度によって異なるため、角度によってICDや見かけの大きさが異なる画像が得られる。 α7 + SAMYUNG 8mmを用いる場合、0°~見かけ約150°で主点は8mm程度異なり、レンズ高さ70mmを使い幅を合計7mmを縮めるとすれば、主点は$\frac{7}{70 \cdot 2} \cdot 8 = 0.4$mmずれる。この程度なら全然アリかも?

レンズをずらす?

内側方向の視野はあまり要らないとみて、レンズを3.5mm内側にずらす。 高そう?マウントだけで売ってない?3Dプリンターは?ピントが合わなくなる?

レリーズ

  • 2つのボタンを同時に押すのは難しいようなので、レリーズに対応していなければならない。

この互換性がとてもあるリモートスイッチの「互換性」の項が有用だと思う。

アクセサリーシュー/ホットシュー/マルチインターフェースシュー(SONYによる呼び方)

  • Canon: EOS M5 / M6MkII / M6。M5: 43.7k~, M6: 39.5k~
  • SONY: α1/7/9/6000シリーズ。α6000: 40k~, α6100: 58.8k~
  • LUMIX: 全部ついてそう?
  • OLYMPUS: 全部ついてそう?

SONYで組もうかと考えていたが、もしやマイクロフォーサーズのほうが良いのだろうか????

レンズ候補

ストロボの同期

  • ストロボは通常キセノンランプに充電したコンデンサを用いて瞬間的に高電圧を掛けることで発光するという仕組みを取る。22
  • ストロボの発光時間は有名なTT600では1/300~1/20000秒であり、光量によって異なるらしい。非常に詳しい表によれば、1/4以下で使うと大体1/2000秒未満の発光時間となる23ため、大まかに言えばシャッター速度よりは速い。
  • 電子シャッターでは、普通1/200秒程度未満のシャッタースピードを用いる場合、先幕と後幕が同時に走る、つまり全てのセンサーが光を感知しているタイミングが存在しなくなる。そのため全体にわたって明るさが一定である写真を撮るためには、ストロボは一定周期で複数回発光する必要がある。これをハイスピードシンクロ(HSS)と呼ぶ。HSSを使うとストロボの寿命が低下する。24
  • 人物撮影では手ブレ防止の為1/100秒以下のシャッタースピードを用いる25ため、HSSを避けるとシャッタースピードは1/100~1/125秒程度に固定されてしまう。[^cosplay]
  • (ついでにメモするが、背景をぼかしたいことが多々ある。被写界深度を下げるために絞りを下げ、ISOを調節する。屋外などで、ISOが最低値であっても背景が白飛びする場合はNDフィルターを用いる。[^cosplay])

  • 分岐させたケーブルレリーズを用いても、完全に同時に撮影することは難しいらしい。26この方はLEDライトを用いている。

  • フラッシュを複数のカメラと同期する 6 つの方法 — Xangle Camera Serverにいくつか対策が書いてある。とにかく普通ストロボは先幕か後幕が走るタイミングで光るが、これをその中間で光るようにしたい。
  • GODOX X1には0-100×0.1ms, X2には0-99×0.1msの遅延機能があるが、X Proにはない模様。

絞り込む

先駆者の方々


  1. https://www.webmd.com/eye-health/pupillary-distance
  2. https://www.airc.aist.go.jp/dhrt/head/index.html#stats
  3. (PDF) A study on the normal values of inner canthal, outer canthal, interpupillary distance and head circumference of 3-21 years ijaws
  4. Mean interpupillary distance (mm) values in various age groups  | Download Table
  5. 雑記帳 その18
  6. イメージセンサーの大きさの違いと特徴 | 姫野ばら園 八ヶ岳農場
  7. 2.4: Images Formed by Refraction - Physics LibreTexts/University_Physics_III-Optics_and_Modern_Physics_(OpenStax)/02%3A_Geometric_Optics_and_Image_Formation/2.04%3A_Images_Formed_by_Refraction#Equation+20:+Refraction+at+a+convex+surface)
  8. インナーフォーカスのレンズについて|カメラ買取・販売専門店のナニワグループ
  9. 【幾何光学】前方/後方 被写界深度の導出など - 溶けかけてるうさぎ - BLOG
  10. 被写界深度 - ウィキペディア
  11. Film speed - Wikipedia
  12. エレクトロニクス | 無料の全文 | 民生用カメラのRAWファイル解析に基づく写真ノイズ性能測定
  13. Fisheye lens - Wikipedia
  14. Fisheye lens - Wikipedia
  15. https://www.dpreview.com/forums/thread/4593599
  16. (1) Fisheye Apsc / Full Frame Sony : AskPhotography
  17. (1) Experiments with the Samyang 7.5mm ƒ3.5 : SonyAlpha
  18. カメラのキタムラ|【中古】ミラーレス一眼 在庫一覧
  19. レンズマウント外径・内径とフランジバックの一覧 | Amazing Graph|アメイジンググラフ
  20. キヤノン、APS-C高倍率ズーム「RF-S18-150mm F3.5-6.3 IS STM」。6.8万円 - デジカメ Watch
  21. A quick update on the rumored Nikon full-frame mirrorless camera Z-mount - Nikon Rumors, Talk:Nikon Z-mount - Wikipedia
  22. エレクトロニックフラッシュ - Wikipedia
  23. (16) #103 ストロボの閃光時間、11機種を比べる! - YouTube
  24. (16) その1/屋外のコスプレイベントは逆光+絞り開放+ストロボで盛れる! - YouTube
  25. 【3分で読める!】被写体ブレしないカメラのシャッタースピード | コスP!
  26. VR180カメラを作る その1 | Simulator Laboratory "SEALS-海空陸宇宙-"

(小ネタ) easylist (LaTeX)で `問1` , `(1)` など接頭辞をつける方法

xparseでコマンドを作成し、CtrComオプションを利用する。1

\documentclass[autodetect-engine,ja=standard]{bxjsarticle}
\usepackage[at]{easylist}
\usepackage{xparse}
\NewDocumentCommand{\CtrComProblem}{m}{Problem#1}

\begin{document}
\begin{easylist}[enumerate]
    \ListProperties(Numbers=a,CtrCom1=\CtrComProblem)
    @ ...
\end{easylist}
\end{document}

  1. Mark, FinalMarkオプションはシンボルの後の文字のためのものであり、利用できない。Styleオプションを利用する方法もあると思われる。

LuaTeX(LuaLaTeX)/XeTeX(XeLaTeX) + BXjscls/LuaLaTeX-ja + Latexmk/ClutTeX + BibLaTeX + LaTeX Workshop + Git + pre-commit + GitHub

LuaTeX/LuaLaTeX/XeTeX/XeLaTeX + BXjscls/LuaTeX-ja + Latexmk/ClutTeX + BibLaTeX + LaTeX Workshop + Git + pre-commit + GitHub

  1. LuaTeX/LuaLaTeX/XeTeX/XeLaTeXはぴーでぃーえふのコンパイルに使うエンジンだにょ。
  2. BXjscls/LuaTeX-jaは日本語を表示するための文章クラスだにょ。
  3. Latexmk/ClutTeXコンパイルのためのコマンドを必要なだけ呼び出すためのツールだにょ。
  4. BibLaTeXは参考文献を管理するためのパッケージだにょ。
  5. LaTeX WorkshopVS CodeLaTeXをべんりに使えるVS Code拡張機能だにょ。
  6. Git編集履歴をよさげに管理してくれるソフトウェアだにょ。
  7. pre-commitはGitで履歴を付ける前にフォーマットしてくれるソフトだにょ。
  8. GitHubはいろいろべんりなGitのリモートだにょ!

エンジンはどれを使うにょ?

LuaTeX vs XeTeX vs upLaTeX vs pLaTeX vs pdfTeX ?

  • ”XeTeX か LuaTeX の二択”1という説があるにょ。

詳細

すでに優れたテンプレートはあるのかにょ?

LaTeX"テンプレート"という概念があるので、検索するのがとても難しいにょ。

詳細 但し、"latex+latexmk+pre-commit"などで検索するとほとんど結果が出ないため、上記の要求を満たし、かつ絶対的に優れているテンプレートがあるとは言えないと思われます。 ノートを全てLaTeXで取った LaTeX and Vim英語圏で有名だと思います。shenapse/template-texlive-docker-vscode、eed6d80434107db92f2276b9c4e5a799ce064cdeも見つけました。

ビルドツールはどれを使うにょ?

Latexmk vs llmk vs ClutTeX vs arara vs ptex2pdf

中間ファイルを別の場所に置いてくれるClutTeXを使うにょ!特に設定はいらないにょ。これでファイルがすっきりするにょ。

ClutTeXに乗り換えるにあたって中間ファイルを消すにはどうするにょ?

git cleanを使うにょ。 まず

git clean -x -n

でなくなったらこまるファイルが消されないか確かめるにょ。大丈夫なら

git clean -x -f

で消すにょ。

詳細 ptex2pdfは3年ほど更新がないようです。 LaTeX Workshopを使ってしまうと、エディターに対する依存性が高まってしまうと思います。

Latexmkをどうしても使いたいにょ……? .latexmkrcの設定

./.latexmkrc

#!/usr/bin/env perl
$lualatex    = 'lualatex -shell-escape -synctex=1 -interaction=nonstopmode';
$pdflualatex = $lualatex;
$biber       = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';
$bibtex      = 'bibtex %O %B';
$makeindex   = 'mendex %O -o %D %S';
$pdf_mode    = 4;
$max_repeat  = 5;
$pvc_view_file_via_temporary = 0;

# use default previewer
if ( $^O eq 'MSWin32' ) {
    $pdf_previewer = 'start';
}
elsif ( $^O eq 'darwin' ) {
    $pdf_previewer = 'open';
}
else {
    $pdf_previewer = 'evince';
}

使うTeXの種類によって$pdf_mode等を変更する必要があります。ここではLuaTeX+Biber+makeindexにおける例を挙げます。BibLaTeXのバックエンドにはBiber, BibTeX, bibtex8があるようですが、普通はBiberを使うようです。 参考 - 続くといいな日記 – upLaTeX から LuaTeX に移行する - latexmkrcメモ #LaTeX - Qiita

サブディレクトリにある.texファイルをコンパイルする場合、LaTeX Workshopはそのディレクトリからコマンドを呼び出すため、.latexmkrcもそのディレクトリに置くか、または引数に.latexmkrcのファイルパスを指定する必要があります。

{
  "latex-workshop.latex.recipes": [
    {
      "name": "latexmk",
      "tools": ["latexmk"]
    }
  ],
  "latex-workshop.latex.tools": [
    {
      "name": "latexmk",
      "command": "latexmk",
      "args": [
        "-r",
        "%WORKSPACE_FOLDER%/.latexmkrc",
        "-outdir=%OUTDIR%",
        "%DOC%"
      ],
      "env": {}
    }
  ],
  "editor.wordWrap": "on",
  "latex-workshop.latex.autoBuild.cleanAndRetry.enabled": false
}

.latexmkrcが適切に読み込まれていない場合、LaTex Compilerの出力を見ると、-interaction=nonstopmodeが指定されていないために途中で止まっているかもしれません。その場合は、LaTeX WorkshopのウィンドウからTerminate current compilationを押します。

ClutTeXLatexmkLaTeX Workshopと一緒に使うために.vscode/settings.jsonを作るにょ!

{
  "latex-workshop.latex.recipes": [
    {
      "name": "cluttex",
      "tools": ["cluttex"]
    },
    {
      "name": "latexmk",
      "tools": ["latexmk"]
    }
  ],
  "$comment": "LaTeX Workshop calls commands from the directory of the main tex file, not the root of the project. See https://github.com/James-Yu/LaTeX-Workshop/wiki/Compile#placeholders for more info.",
  "latex-workshop.latex.tools": [
    {
      "name": "cluttex",
      "command": "cluttex",
      "args": ["--engine=xelatex", "--biber", "%DOC%"],
      "env": {}
    },
    {
      "name": "latexmk",
      "command": "latexmk",
      "args": [
        "-r",
        "%WORKSPACE_FOLDER%/.latexmkrc",
        "-outdir=%OUTDIR%",
        "%DOC%"
      ],
      "env": {}
    }
  ],
  "editor.wordWrap": "on",
  "latex-workshop.latex.autoBuild.cleanAndRetry.enabled": false,
  "latex-workshop.latex.autoBuild.run": "onSave"
}

pre-commitはどのフックを使うにょ?

  • .texのフォーマットには、まずlatexindentをつかうにょ!LaTeX Workshopのデフォにょ。
  • .texのフォーマットにpre-commit-latex-hooksも使うにょ。
  • .texのリントにはchktexlacheckをつかうらしいにょ。3
  • .bibのフォーマットにはbibtex-tidyをつかうにょ!

latexindent.latexindent.yamlの設定

素直にコピペするにょ!(view rawからまず開くにょ!)

詳細 これは本当に難しいようなので、素直に専門家に頼る。 但し、ファイルはprettieryamlとして認識されないため、コメントを除去する必要がある。そこまでして使う価値があるかは、筆者には判断しかねる。 オプションは以下を参照した。

.bibのフォーマットはLaTeX Workshopに直接実装されているため、pre-commitと同時に使いにくいし、こちらもあまり特定のエディターに依存したくない。 あまりメンテナンスされているフォーマッタは無いが、bibtex-tidyが一番まともだと思われる。但し、v1.9.0より後ではpre-commitargsが正常に動作しないという不具合が現時点で解決されていない。

.latexmkrcPerlファイルであるため、やり過ぎ感はあるが、一応フォーマットする。Perlのインストールが必要。Strawberry PerlとActivePerlがあるが、段々と前者が主流になっている模様。4

winget install -e --id StrawberryPerl.StrawberryPerl
  - repo: https://github.com/henryykt/pre-commit-perl
    rev: v0.0.5
    hooks:
      - id: perltidy
        files: ".latexmkrc"

pre-commit-latex-hooksは"pre-commit latex"等で検索すると最も上に出てくる。Rustのインストールが必要。

Rustをインストールしておくにょ。

winget install -e --id Rustlang.Rustup

pre-commit-config.yaml

# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
exclude: "CHANGELOG.md|.copier-answers.yml"
default_stages: [commit]

ci:
  autofix_commit_msg: "chore(pre-commit.ci): auto fixes"
  autoupdate_commit_msg: "chore(pre-commit.ci): pre-commit autoupdate"

repos:
  - repo: https://github.com/commitizen-tools/commitizen
    rev: v3.2.2
    hooks:
      - id: commitizen
        stages: [commit-msg]
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
      - id: check-added-large-files
      - id: check-builtin-literals
      - id: check-case-conflict
      - id: check-docstring-first
      - id: check-merge-conflict
      - id: check-json
      - id: check-toml
      - id: check-xml
      - id: check-yaml
      - id: detect-private-key
      # - id: end-of-file-fixer
      # - id: trailing-whitespace
  - repo: https://github.com/pre-commit/mirrors-prettier
    rev: v2.7.1
    hooks:
      - id: prettier
        args: ["--tab-width", "2"]
  - repo: https://github.com/jonasbb/pre-commit-latex-hooks
    rev: v1.4.0
    hooks:
      - id: american-eg-ie
      - id: cleveref-capitalization
      - id: csquotes
      - id: ensure-labels-for-sections
      - id: no-space-in-cite
      - id: tilde-cite
        # args:
        #     [
        #       # If present only check that there is a \label{} but not the value
        #       "--ignore-label-content",
        #     ]
      - id: cleveref-instead-of-autoref
  - repo: https://github.com/cmhughes/latexindent.pl.git
    rev: V3.23.4
    hooks:
      # - id: latexindent
      # - id: latexindent-conda
      - id: latexindent-docker
        args:
          - --overwriteIfDifferent
          - --replacement
          - --local
          - --modifylinebreaks
          - --silent
  - repo: https://github.com/FlamingTempura/bibtex-tidy
    rev: v1.9.0
    hooks:
      - id: bibtex-tidy
        args: [--no-align]

GitHub Actionsでコンパイルするにょ!

コンパイルにもcluttexを使うにょ!Dockerの起動に2分ぐらいかかるからprivateリポジトリの場合残り時間に気をつけるにょ。1日60分ぐらい使えるから、10回/日ぐらいが無難にょ。

.github\workflows\build.yaml

name: Build LaTeX document
on:
  - push
  - pull_request
  - workflow_dispatch
jobs:
  build_latex:
    runs-on: ubuntu-latest
    steps:
      - name: Set up Git repository
        uses: actions/checkout@v4
      #   - name: Compile LaTeX document
      #     uses: xu-cheng/latex-action@v3
      #     with:
      #       root_file: "**/*.tex"
      #       latexmk_use_xelatex: true
      - name: Compile LaTeX document
        uses: xu-cheng/texlive-action@v2
        with:
          scheme: full
          # runs on docker image
          # clutex: https://github.com/minoki/cluttex
          # non-paralleled version:
          # find . -name "*.tex" -exec sh -c 'cd $(dirname {}) && cluttex --no-halt-on-error --no-file-line-error -e xelatex $(basename {})' \;Q
          run: |
            apk add parallel
            find . -name "*.tex" | parallel "cd $(dirname {}) && cluttex --no-halt-on-error --no-file-line-error -e xelatex $(basename {})"
      - name: Upload PDF file
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: PDF
          path: "**/*.pdf"

ちなみにcluttexはデフォルトで--halt-on-error --file-line-errorとなっているから気をつけるにょ。GNU Parallelで高速化してるにょ。actions/cacheでもっと速くなると思うにょ。Latexmkを使うときはlatex-actionをそのまま使うといいにょ。

マルチカーソルを使いこなすにょ!

Ctrl+Dで次の同じワードにも同時にカーソルをおけるにょ。\begin{...}...\end{...}...の中身を変えるのに使えるにょ。ドキュメントを読むにょ!

サジェストとスニペットを使いこなすにょ!

特にこだわりがなければとりあえずLaTeX WorkshopWikiにあるスニペット(例:BEQ\begin{equation}...\end{equation})とサジェスト(例:@aα, @/\frac{}{})の説明を読むにょ!

さらなる高みを目指すなら下のファイルも使うなり改造するなりするにょ。

.vscode/latex.code-snippets

人によってdfn,Def,defi,definitionなど定理環境の派閥の違いがあることを考えると(GitHubで調べると面白いにょ!)、自動生成するのもありにょ。

from pathlib import Path
import json


theorems = "axiom,defi,thm,prop,lemma,cor,ex,exer".split(",")
envs = "figure,proof,equation,align,alignat,gather,multiline,split,aligned,alignedat,gathered,lgathered,rgathered,multilined,cases".split(",")

def make_item(prefix: str, env: str) -> tuple[str, dict[str, list[str]]]:
    return f"begin/end {env}", {
        "prefix": [
            prefix, 
        ],
        "body": [
            "\\begin{" + env + "}",
            "\t$TM_SELECTED_TEXT$0",
            "\\end{" + env + "}",
        ]
    }
    
d = dict(make_item(env, env) for env in envs + theorems)
d.update(dict([make_item("begin", "${1:env}")]))
Path("latex.code-snippets").write_text(json.dumps(d, indent=4))

複雑なスニペットで長いコマンドをすぐに書けるようにするよりも\NewDocumentCommand\DeclareDocumentCommandでコマンドを定義したほうが良いかもしれないにょ。そーゆう意味で下のHyperSnips用のファイルはいらないかもしれないにょ。

.vscode/latex.hsnips

本棚の設計?

本棚に必要な木材

本のサイズ

種類 サイズ
菊判 234x159
A5 210x148
B6 182x128

幅,厚さ,長さ,仕上げ

  • 幅は、目的とする本のサイズにも依るが、128~180程度が目安となる。面倒かもしれないが、2枚を何らかの方法で横につなげるという手もあるかもしれない。
  • 厚さは、簡易的に平行部の曲げ応力と垂直部の座屈を考慮すると、S-P-F-甲種-3級の値では、15mm程度あればギリギリ大丈夫そうである。12mmだと、ちょっと地震が起きたら平行部・垂直部ともに折れ曲がりそうである。18mmあれば安心である。杉材に変えると許容応力度は上がるがヤング率が下がり、曲げ応力への耐性は上がるが、座屈への耐性が下がり、よりシビアになる。材料力学に自信がないため、間違っていたらすみません。
  • 長さは、突っ張りの本棚を作る場合でも本体は2つに分けるため、配送の観点から1.8m(6F)-2m程度のものが望ましいであろう。
  • 仕上げは、少なくとも上下面、できれば4面ともプレーナー仕上げしてある必要がある。荒材は加工が困難であるらしいので、避けたい。内装用に接合用の加工を施されたもの(特に本実(ほんざね)加工、相じゃくり加工)がほとんどだが、こちらも避けたい。

厚さ(材料力学)

物性値

ヤング率$E$、最大圧縮/引張/曲げ/剪断応力$σ_c, σ_t, σ_b, σ_s$、安全率を指定する必要がある。 木材にはJAS規格で定められた等級区分製材と定められていない無等級区分製材があるが、我々が一般に入手可能であるのは無等級材である。 特に政令に従う必要はないのだが、

上の表は見づらかったり有償であったりするので、木造の設計メモやICBAの第9章 許容応力度及び材料強度を見れば良いと思われる。(前者は値が正しいかは確認できていない。)

材質 $σ_c$ $σ_t$ $σ_b$ $σ_s$ $E$ $ρ$
S-P-F-甲種-2級 17.4 11.4 21.6 1.8 9.6 0.50?
すぎ(無等級) 17.7 13.5 22.2 1.8 7.0 0.38?

本の重さ

漫画の密度を求めるのは難しいが、$0.8$g/cm3とする。厚さの平均は$11$mmとするが、ジャンルに大きく依るだろう。(少年漫画等はもっと分厚くなり、A5版の四コマ漫画等はもっと薄くなるだろう。) 追記:漫画の密度は出版社等により大きく変わるようである。いくつか計測したところ、B6/178pの夢喰いメリー1巻が169g、A5/168pのゆるゆり2巻が293g、A5/118pのドージンワーク1巻は260gと、A5の芳文社の漫画は特に重めであるようである。下の計算はA5の芳文社の漫画の重量を過小評価していると思われる。

計算

よく分からないが、両脚絞端矩形ラーメンに当たると思われる。 つまり、地震等を考えない場合、普通の単純支持梁と両端ピン支持の長柱と同じとしてよいはず。(自信無し)

平行部

$$ I=\frac{bh^{3}}{12} $$ $$ R_{\mathrm{max}}=\frac{wl}{2} $$ $$ M_{\mathrm{max}}=\frac{wl^{2}}{8} $$ $$ σ_s=\frac{R}{bh} $$ $$ Z=\frac{2I}{h} $$ $$ σ_m=\frac{M_{\mathrm{max}}}{Z} $$

垂直部

$$ P_{\mathrm{cr}}=η\frac{EI}{L^{2}} $$ $$ \frac{W_{\mathrm{all}}}{2} \leq P_{\mathrm{cr}} $$ $η$は両端ピン支持の長柱では$\pi^{2}\approxeq9.8696$となるが、両端ピン支持?の自重を受ける長柱では$18.5687$となる。2 これらを使って計算すると、上述の結果になると思われる。

棚板・側板の価格一覧

材料は価格が安ければ良いため、SPF(松)か杉か合板が良さそうである。

  • SPFの場合、B6では1x6、それ以外では1x8となる。(1x7材は見たことがない。)
  • 杉の場合、長さは6尺(1820mm)が良いだろう。厚さは分(3mm)単位、幅は寸(30mm)単位となっているようで、体感的に3,4,(5,6,)12分(9,12,(15,18,)35)x3,4,6寸(90,120,180)が多い気がする。厚さがあまり本棚に適していないものが多い模様。中古品やプレーナー仕上げされていない材(荒材)が多いため、注意。
  • 合板の場合、大きさは3尺x6尺(910x1820mm)となる。厚さは15,18mmが良いだろう。

  • 楽天市場 レビュー件数順に検索した。https://search.rakuten.co.jp/search/mall/%E6%9D%89/100896/?s=5

ショップ名 サイズ 価格 価格/2m URL
DIY木材センター 杉 150x2000x15 1360 1360 https://item.rakuten.co.jp/mokuzai-o/sps152002000/?variantId=sps151502000
fiscu フィスク 杉 17.5x1820x18 4 3740+1750(0) 935 https://item.rakuten.co.jp/fiscu/81701820/
fiscu フィスク 杉 18x1820x12 4 3740+1750(0) 748 https://item.rakuten.co.jp/fiscu/81140001/
木一筋 楽天市場 杉 85x2000x12 20 5670+2200 567 https://item.rakuten.co.jp/kihitosuji/sugi12x85x2000/
木一筋 楽天市場 杉 70x2000x12 24 6760+2200 563.3 https://item.rakuten.co.jp/kihitosuji/sugi12x70x2000/
吉和民家 杉 120x910x12 24 4400+990 366.7 https://item.rakuten.co.jp/yoshiwa-minka/dsm910120-24/
岡元木材 杉 1x6 6F (140x1985x19) 890+2200 890 https://item.rakuten.co.jp/okamoku-s/i0000236/
岡元木材 SPF 1x6 6F (140x1830x19) 1460+2200 1460 https://item.rakuten.co.jp/okamoku-s/10000570/
東條製材所 楽天市場 杉 72~75x900x12~13 48 4800+2000+0 566.7 https://item.rakuten.co.jp/toujyou-seizai/10000015/?s-id=bh_pc_item_list_name
木工ランド SPF 1x8 6F 810+150 810 https://www.mland.gr.jp/products/spf/001/
木工ランド 杉 1x6 6F 1080+100 1080 https://www.mland.gr.jp/order_select.php
カインズホーム SPF 1x6 6F 1180+NaN 1180 https://www.cainz.com/g/4528182160115.html
カインズ ホーム SPF 1x6 12F 1580+NaN 790 https://slowlifeblog.com/spf-wood-homecenter/
カインズ SPF 1x6 6F 709+NaN 709 https://slowlifeblog.com/spf-wood-homecenter/
コーナン(プロ) SPF 1x6 6F 548+NaN 548 https://slowlifeblog.com/spf-wood-homecenter/
カインズ ホーム SPF 1x8 6F 1080+NaN 1080 https://slowlifeblog.com/spf-wood-homecenter/
カインズ SPF 1x8 6F 982+NaN 982 https://slowlifeblog.com/spf-wood-homecenter/
コーナン(プロ) SPF 1x8 6F 980+NaN 980 https://slowlifeblog.com/spf-wood-homecenter/
コメリ SPF 1x4 6F 298+NaN 596 https://www.komeri.com/shop/g/g132611/
コメリ SPF 1x6 6F 1080+NaN 1080 https://www.komeri.com/shop/g/g469523/
コメリ SPF 1x8 6F 1480+NaN 1480 https://www.komeri.com/shop/g/g469523/
コメリ ラワン合板 15x1820x910 3980+NaN 663.3 https://www.komeri.com/shop/g/g253571/
満点木材 杉 180x1820x15-2 (取り寄せ) 347+? 347+? https://lumber.ocnk.net/product/192
満点木材 松 150x1820x15 6 8690 1448.3 https://lumber.ocnk.net/product/718
満点木材 桧 150x2000x15 6 本実 7150 1191.7 https://lumber.ocnk.net/product/1123
満点木材 桧集成 150x2000x15 6 本実 5819? 969.8 https://lumber.ocnk.net/product/1165
満点木材 桧 115x2000x15 8 本実 5280? 660? https://lumber.ocnk.net/product/893
満点木材 楢 120x2000x15 7 本実 9075 1296.4 https://lumber.ocnk.net/product/1023
満点木材 栗 120x2000x15 7 本実 8800 1257.1 https://lumber.ocnk.net/product/1133
満点木材 樺桜 130x2000x15 7 本実 8525 1217.9 https://lumber.ocnk.net/product/983
満点木材 樺桜 75x2000x15 12 本実 3980 663.3 https://lumber.ocnk.net/product/1194
羽目板屋どっとこむ 杉 135x1900x15 10 本実 9245 924.5 https://lumber.ocnk.net/product/718
ウッディヨネダ(※加工屋) 杉 150x1800x150 5346 5346 https://woodyyoneda-shop.com/products/detail.php?product_id=4
  • 満点木材では、欅は柱やテーブル用の高級材しか無く、楢、栗は12cmまで、桧は12cmは安いが15cmになると急に高くなる。樺(かば)は塗装品が安い。桧の75mm品は10mm厚。樺の75mm品は在庫が殆どない。
  • 本実(ほんざね)加工は下図のように凸部と凹部があり、下に切欠があるが、切欠に目を瞑り、凸部(雄実,おざね)は鑿(のみ)で落とせるらしいので落として凹部(雌実,めざね)を背板で隠せば使えるかも知れない。
  • 本実加工があることを逆手に取り、幅90mmの材を2つつなぎ合わせて幅180mmの本棚が作れるかもしれない。

出典:「激安 樺桜 幅広 カバザクラ オイル塗装 フローリング材床材」https://lumber.ocnk.net/product/983, 2023/08/08閲覧.

  • 相じゃくり加工ならあまり気にならないかも知れない。ただし相じゃくり加工はマイナーで杉以外ではあまりない。
  • コーナンでは無料トラック貸出があり、また配送を頼むと大きさに関わらず800円程度になるらしい。
  • ロイヤルホームセンター:不明https://www3.roymall.jp/shop/g/grhc2-038210/
  • 1台当たり8枚必要であるから、1枚1000円なら8000円かかる。

全体として18mmの杉材が入手しにくく、迷い中である。

背板

背板は合板、天井材の選択肢があると考えられる。

ショップ名 サイズ 価格 価格/1820x910mm URL
コメリ ラワン合板 4x1820x910 1350+NaN 1350 https://www.komeri.com/shop/g/g1270996
コメリ ラワン合板 5.5x1820x910 1550+NaN 1550 https://www.komeri.com/shop/g/g1271005/
満点木材 杉 330x1820x7 6 5489 2744.5 https://lumber.ocnk.net/product/540
三祐木材 桧合板 5.5x1820x910 1920+2000 1920 https://www.sanyumokuzai.co.jp/product/%E3%80%90%E3%81%B2%E3%81%AE%E3%81%8D%E3%80%91-%E6%A7%8B%E9%80%A0%E7%94%A8%E5%90%88%E6%9D%BF%E3%80%80-%E7%AF%80%E3%81%AA%E3%81%97%E3%80%803x6%E3%82%B5%E3%82%A4%E3%82%BA-%E3%80%90%EF%BC%94%E3%82%AB/

ニス

1台あたり8枚使うため、裏表合わせて$0.15\cdot1.82\cdot8\cdot2=4.4\mathrm{m^{2}}$必要で、ニスは2回塗りで約0.1L/m2必要であるから、440mL程度必要である。和信のニスが最もメジャーであるようだが、3000円/0.7L9600円/4kgもする。 さらなる仕上がりを目指す場合サンディングシーラーを使うようである。こちらも1回塗りで約0.1L/m2必要2700円/0.7L8000円/4kgする。 したがって塗料だけで2000~5700円程度かかる。

既製品

Amazonのリンクを踏んでも当方にお金は入りません。

本棚を販売している企業が出している動画であることに留意する必要があるが、やはり突っ張りであると安心な気がする。


www.youtube.com

ラック

ラックは事実上製造しているのが一社(OEM,台湾製?)しかないようである。OEM先を特定しようとしてAliexpressや画像検索等で大分調べたが、うまく行かなかった。 棚板をバラで売っているところも見つけられなかった。山善、菊屋等の商社が販売しているようである。 側板の網目が3マスのものは幅63cm, 78cm, 92.5cmを確認しており、4マス 最下段の板の下にも本を置けば9段になる。本棚を買うよりコストパフォーマンスが相当良いが、ラックを採用するとB6だと段あたり12kg、A5だと16kg程度かかるため、場合によっては耐荷重オーバーになる。 天井高が2.2m程度の場合A5ならこれでピッタリだが、B6の場合は1段分スペースが余ると思われる。天井高が2.4m程度の場合は、更に1段分余ることになる。 奥行き24cmがあれば、ちょっと壁面から離せばB6を二段重ねに出来、1350~1500冊程度入りそうだが、より耐荷重オーバーになる。

10840円,幅78,奥行24,8段

13400円,幅78,奥行25,8段

21,980円,幅92.5,奥行き25,10段

11,990円,幅68,奥行き34,8段

12,990円,幅88,奥行き34,8段

16000円,幅63,奥行き25,8段,部分的に背板?がある変種

17999円,幅78,奥行き25,8段,部分的に背板?がある変種

本棚

突っ張りまでいくほど高いものはほぼ山善の独壇場になっている模様……。

19911円,幅81,奥行15.5,9段

24800円,幅101,奥行15.5,9段

17392円,幅70,奥行18,10段

突っ張りを諦めると途端に安くなる。

9980円,幅89,奥行28.8,高さ180.0,8段

シューズラック

流石にシューズラックは駄目かな……

2380円

感想

ということで厚さ18mmの板で頑丈な本棚を作ろうものなら12000円かかるので、自分の人件費と比べると大して得にならず、時間がかかりすぎるので(調べるだけで何日も無駄にした……)ちょっと保留。

追記

結局YahooショッピングでTP-5405を実質7620円~で4個購入した。既存の本棚に新たに突っ張り棒を設置するのはコストが掛かり面倒でもあるため、耐震性の観点から古い本棚はこれらで順次取り替えることにした。

Audacityで音声ファイルを分割する

ショートカット一覧

ラベルの追加

  • Xでカーソルを更新しながら再生
  • Ctrl+Bでラベルを追加

書き出し

  • Ctrl+Shift+Lまたはファイル(F)>書き出し(E)>複数ファイルの書き出し(M)...
  • 書き出し