【LaTeX】数式環境の使い分け早見

自分がLaTeX資料を作る時にっている数式環境をまとめます。

行中数式

$$を使っています。場合によっては数式と本文のフォントが食い違うため、1文字の数字や文字でも囲んだ方がいい場合も。

$a = b$

式番号無し数式

\[ \]を使っています。\begin{equation*} \end{equation*}でもできますが、単純に文字数が少ないのでこちらの方が良いと思います。

\[
  a = b
\]

式番号付き数式

\begin{equation} \end{equation}を使います。説明は不要ですね。

\begin{equation}
  a = b
\end{equation}

複数行にまたがる数式

\begin{align} \end{align}を使います。\begin{eqnarray} \end{eqnarray}でも同じようなことができますが、実際に使っていて諸々の問題にぶち当たったので非推奨です。

\begin{align}
  a &= b\\
  c &= d
\end{align}

参考ページ

更に詳しい内容は下記のページが参考になります。
https://qiita.com/t_kemmochi/items/a4c390b4967b13f3afb7qiita.com
ichiro-maruta.blogspot.jp

【LaTeX】TeXworksのフォント変更【TeXworks】

結論

デフォルトで選択可能なフォントではMS ゴシックを選べばマシ。

背景

WindowsのTeXworksのデフォルトフォントMS UI Gothicで、書いていてとても見難いです。特にIや_といった文字が埋もれてしまい超ストレスフルです。

フォントの変更

以下の手順で変更します。(※画像ではフォントが既にMeiryo UIに変更されています)

  1. 編集
  2. 設定
  3. エディタのデフォルト直下のプルダウンを操作
  4. 使いたいフォントを選びOK
  5. 一度エディタを終了し再起動

画面の通りフォントサイズなども変更可能です。

f:id:wrongwrongwrongwrong163377:20180421205832p:plainf:id:wrongwrongwrongwrong163377:20180421210045p:plain

参考サイト

detail.chiebukuro.yahoo.co.jp

フォントについて

全角半角混じりでプログラミングをするのであれば等幅フォントがおすすめです。等幅フォントとは文字によって幅が違わず、全角=半角2文字幅のフォントで、インデントが揃うのでプログラムなどでは見やすいです。

自分はMS ゴシック*1に設定しました。ここまでで満足してしまったので止めてしまいましたが、こだわるならRictyなるフォントが良さげに見えました。

選択肢は恐らくOSで使用可能になっているフォントだと思われるので、選択肢に無いフォントでも導入すれば使用可能かも?

*1:MS ゴシックも0とOの区別が難しいなどオススメはできません

【LaTeX】マクロ機能\newcommandを使った文章作成効率化

まとめ

この記事の内容をまとめたサンプルです。いつもの\beginと\endが乱立する感じは無く、とてもシンプルに書けています。

\documentclass[dvipdfmx]{beamer}
\usetheme{Boadilla}

% コマンド定義
\newcommand{\EQ}[1]{\begin{equation}{#1}\end{equation}} % 等式
\newcommand{\MATRIX}[2]{\left(\begin{array}{#1} #2 \end{array} \right)} % 行列
\newcommand{\FRAME}[2]{\begin{frame}{#1} #2 \end{frame}} % フレーム
\newcommand{\BLOCK}[2]{\begin{block}{#1} #2 \end{block}} % ブロック

\begin{document}
\FRAME{さんぷる}{
  あああ
  \BLOCK{いいい}{
    \EQ{
      \MATRIX{ccc}{
        a & b & c \\
        d & e & f \\
        g & h & i
      }
    }
  }
}
\end{document}

出力結果は以下の通りです。
f:id:wrongwrongwrongwrong163377:20180421182411p:plain

背景

普通にLaTeXで文章作成をやっていると一々環境を書くのがめんどくさいです。例えば数式の環境は以下のようになります。

\begin{equation}
  e^{i \theta} = \sin \theta + i \sin \theta
\end{equation}

マクロ機能を使う

LaTeXにはこうした不便を解消するマクロ機能があります。
実際にマクロ機能で数式を定義してみた例が以下。

\newcommand{\EQ}[1]{\begin{equation}{#1}\end{equation}}

これをプリアンブル部に書いた上で数式を書くと以下のようになります。

\EQ{
  e^{i \theta} = \sin \theta + i \sin \theta
}

超シンプルになりましたね。

応用

Beamerのblockなどもこの方法で簡単化できます。

\newcommand{\BLOCK}[2]{\begin{block}{#1} #2 \end{block}}
\BLOCK{aaa}{
  bbb
}

行列のように書かなければならないパーツが多くて面倒なものも以下のように簡略化できます。

\newcommand{\MATRIX}[2]{\left(\begin{array}{#1} #2 \end{array} \right)
\MATRIX{ccc}{
  a & b & c \\
  d & e & f \\
  g & h & i
}
作法

個人的な作法ですが、自分で定義したマクロは大文字で書くようにしています。
小文字で書くとLaTeX本来の命令と混ざるのと、場合によっては使いたい名前が既に定義されている名前と被って使えなかったりするからです。

参考サイト

詳しい使い方は以下を参考にして下さい。
LaTeX入門/LaTeXマクロの作成 - TeX Wiki

【c/c++】SFMTを使ってみた

SFMTを利用できるようにするまでをまとめます。(※現状上手く動いていません、備忘用メモ程度です……)

ダウンロード

下記URLからダウンロードします。
SIMD-oriented Fast Mersenne Twister (SFMT)

配置

解凍して配置します。
SFMTはビルドしなければ利用できません。また今回は別のプロジェクトで使い回す予定がなかったので、CLionで予めプロジェクトを作成し、そこの中に入れてプロジェクトと一緒にビルドする形としました。
という訳でプロジェクトのフォルダ構成は以下のようになります。SFMT-src-1.5.1直下にヘッダなどが入っています。
f:id:wrongwrongwrongwrong163377:20180420162419p:plain

ビルド設定

今回は下記の1-1を参考にCMakeListsに設定を書きました。
How to compile SFMT
CMakeListsの内容は以下の通りです。SSE利用の設定がどうたらいう話も見ましたが、とりあえず読めていないのでここでは触れません。

cmake_minimum_required(VERSION 3.10)
project(SFMT_Test)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp SFMT-src-1.5.1/SFMT.c)

add_executable(SFMT_Test ${SOURCE_FILES})

利用

ちゃちゃっといた確認用コードは以下です。

#include <iostream>

#include "SFMT-src-1.5.1/SFMT.h"

using namespace std;

int main() {
    sfmt_t sfmt;

    sfmt_init_gen_rand(&sfmt, 0);

    cout << sfmt_genrand_uint64(&sfmt) << endl;
    cout << sfmt_genrand_uint64(&sfmt) << endl;

    cout << sfmt_genrand_uint32(&sfmt) << endl;

    return 0;
}
実行結果
C:\Users\wrongwrong\CLionProjects\SFMT_Test\cmake-build-debug\SFMT_Test.exe
1139168856888879704
6881867631762694802
3373935053
参考にしたページ

www.albow.net

トラブル

コードを以下のように書き換え、32ビット乱数の生成後に64ビット乱数の生成を行うとAssertionが起きています。順序が逆では発生していません。
時間が無いので気が向いたら原因究明までやるかも?

#include <iostream>

#include "SFMT-src-1.5.1/SFMT.h"

using namespace std;

int main() {
    sfmt_t sfmt;

    sfmt_init_gen_rand(&sfmt, 0);

    cout << sfmt_genrand_uint32(&sfmt) << endl;

    cout << sfmt_genrand_uint64(&sfmt) << endl;

    return 0;
}
実行結果
C:\Users\wrongwrong\CLionProjects\SFMT_Test\cmake-build-debug\SFMT_Test.exe
772581976
Assertion failed: sfmt->idx % 2 == 0, file c:\users\wrongwrong\clionprojects\sfmt_test\SFMT-src-1.5.1/SFMT.h, line 167

Process finished with exit code 3

【日記】強さ・強みついて考えたこと【意見】

ツイッタで書いたことを、日本の現状やらの下りは抜きでもう少し掘り下げたくなったので書きます。

書きにくかったので断定口調としましたが、全部自分で思ってるだけのことです。

戦って勝つ強さ・強みの作り方

冒頭のツイートの通り、戦って勝つ強さ・強みの作り方は以下の3つのレベルに分かつことができます。

  1. 既存の状況の中で強くなる
  2. 自分に有利な状況を作る
  3. 別次元から襲えるようにする
1.既存の状況の中で強くなる

1は筋トレをする、道具を上手く使えるようになるといった、行動によって状況を作るレベルとします。

2.自分に有利な状況を作る

2は戦略や戦術を導入するやり方です。理論の下に行動を体系化し、「何をどのようにどうするとどうなる。だからこのように行動する」までを実現するというレベルです。

3.別次元から襲えるようにする

3は何か新しい物を作る、新しい何かを用いて問題を解決するなど、相手が予想できない所から成果を引き出すことで状況を作るレベルとします。このレベルは、最近よく耳にするイノヴェーションそのものです。

それぞれの実現に必要なコストと効果

それぞれの実現に必要なコストは1<2<3の順に並びます。

1のレベルは単純に行動するだけで達成ができるものです。2のレベルは行動の前に前提となる知識・情報を集めて正しく分析し、正しく行動することで達成できます。3のレベルは、2のレベルを何度も実行した中から新しい事実を発見し、更にその事実に対して2のレベルを正しく実行することで実現できます。

それを実現したときの効果の大きさは1<<2<<3の順に並びます。

ツイートにおいてコストを掛ける優先度は3が一番高いとしたのは、高いレベルを実現するほど戦闘力が跳ね上がるからです。ただし、例えば3のレベルのみに投資し、1や2をおろそかにしてしまえば、結局3が起きなくなる(後述する新奇化が起こってしまい、最終的に相対的に高いレベルに到達できない)状況が発生することも有るでしょうから、どれかだけに投資すれば良いということではありません。

どこまでが人の手の内か

これら3つのレベルの内、人間の手によって制御が可能なのは2まででしょう。体を鍛えたり、戦略や戦術を考えることと違って、他者に差を付けられるような新しいものが自分たちに予想できるはずが無いからです。

一方最近では、その不確実さを許容しつつ新しいものが生まれやすい環境を作る、確率を高めるようなやり方が世界的に戦略として取り入れられつつあると感じます。

 陳腐化・新奇化

2,3のレベルでは、それが一般化した場合効果が低下します。これを陳腐化とします。

例えば金属は、実用化当時は3のレベルに属していたものです。しかし、それは現在では当たり前のものになりました。少なくとも現在の青銅や鉄には戦場を一変させるほどの力はありません。

2のレベルのものが陳腐化した例としてはデータ分析が挙げられるでしょうか。現在企業の中で顧客や売り上げに関するデータを集め分析することは当然のように行われており、ただデータを集め分析するだけでは2のレベルとしての効力は発揮されなくなっています。

陳腐化とは反対に、一度陳腐化していたものの希少性が上がる、あるいはそもそも無くなることによって効果が増す場合が有ります。これを新奇化とします。最も良い例はローマ文明とルネサンスでしょうか。

あるいは世界が発展する中で取り残されるようなことがあれば、周囲では陳腐化しているものがその地域では絶大な効果を発揮する、新奇化が起こるということも有り得ます。

レベルの昇華

1,2のレベルを突き詰めることによって上のレベルと同等の効果が発揮される場合が有ります。これをレベルの昇華とします。

スパルタ兵は極めて精強な兵となるよう育てられ、数の差、戦略を何度も覆しました。日本軍も、超人的な技量・能力を突き詰めることによって、開戦当初はアメリカ軍を相手に兵器の性能を超えた無双の活躍を見せました。これは個々人の能力そのものが戦術・戦略のレベルまで昇華した例でしょう。

一方、この昇華を意図的に起こしたり、起こってしまった昇華の状態を維持しようとすることはあまり良くありません。レベルの昇華はあくまで属人的で再現性の無い状態になりやすい、相手に3のレベルを実現され、前提を崩された際に対応が難しい、更に新しいものを実現するための投資を怠った状況となる、などが理由です。

別の記事に絡めた言い方をするのであれば、下のレベルを突き詰めて上のレベルを目指すやり方はすなわち帰納的な手法であり、この手法は問題の規模や問題そのものの変化に対応することが難しいということには歴史的な説得力があります。

まとめ

これ以上書くと本題がブレブレになるのでまとめます。この記事では戦って勝てる強さ・強みを3つのレベルに分け、それぞれの関係や動きについて考えました。この3つのレベルでの考え方は組織、個人問わず様々な規模・場面に応用していけるのではないかと勝手に思ってます。

【日記】14型程度のゲーミングノートPC 7種 筐体スペック比較【ゲーミングノート】

ノートパソコンの買い替えを考えるため、筐体のサイズや重量の比較表を作りました。

背景

現在利用しているのはLenovo T540pです。最近はこれを持ち運んで講義を受けたり出先で開発したりしていますが、購入当時は持ち運ぶことを想定しておらず、近年ノートPCのスペックが著しく向上したこともあり、現状では『重い・デカイ・非力』の3重苦に苛まれています。特にGPUが非力なため、帰省時に遊びにくいなどの不都合があります。
MSIのGS32の後継機を待ってこの3重苦に耐えてきましたが、残念ながら全く新しいのが出る気配が有りません。ということで14型も視野に入れつつ、Intel第8世代CPUを搭載したノートPCを選ぶ際の参考として以下の条件で比較表を作りました。

  1. 一部例外を除き14型以下のPC
  2. GTX 1050と同等かそれ以上のスペックのGPUを搭載可能
  3. バッテリー込み重量2.0kg以下
  4. テンキーレス

比較表

長さはmm、重量はkgです。

スペック T540p XPS 15 GS65 GS43 P34G v7 AERO 14 Razer Blade RZ09 GS32
パネルサイズ 15.6 15.6 15.6 14 14 14 14 13.3
376.6 357 357.7 345 340 335 345 320
248.1 235 247.7 245 239 250 235 227
厚さ 29.9 17 17.9 22.8 20.9 19.9 17.9 19.8
重量(バッテリー込) 2.59 1.99 1.88 1.8 1.69 1.89 1.86 1.2

考察

調査してみると意外と14型以下のゲーミングノートは選択肢が無く、驚きました。
14型ノートで一歩抜けているのはGigabyte製品でしょうか。重量・サイズ両面でよい数字が出ています。カバンの都合で軽く長辺が短い方が都合が良いので、挙げた中から選ぶならコレです。
15.6型は特に大きさの面で14型の製品に劣っていますね。大画面狭額縁はとても魅力的ですが、自分の選択肢からは外れそうです。
ACアダプタについては情報が見つからず比較しきれない状況が有り、いつかこちらについても比較したいなと思います。

感想

この比較表によって一応の目安・基準はできたかなと思います。
まだIntel第8世代CPU搭載の製品は出揃っておらず、GPUに関してもIntel + Radeonとして話題になったi7 8809G搭載製品が出てきていないなど、購入を躊躇わせる要素が沢山あるのが現状です。
言ってないで買いたいんですが、金が……。それでも年内には買い替えを行いたいですね。
多分AERO 14が日本に入ってきたら買うと思います。……キーボードが物凄い気に入らない配置してるのはとりあえず無視します。

【LaTeX】dvipdfmxが大量のwarningを吐き、block等が表示されない状況への対処

結論

使用している環境に合わせて\documentclassのオプションを書き換えます。

状況

beamerでスライドを作っている最中dvipdfmxが見たことも無い量のwarningを吐き、pdfへの出力は一応できるもののblock等が透明に出力されるといった問題が発生しました。

原因

下記の記事からソースをコピペさせて頂き作成を進めていましたが、\documentclassのオプションの内容が自分の環境と違っていたことが原因です。
qiita.com

対処

自分の環境に合わせ\documentclassのオプションを書き換えました。

% before
% \documentclass[12pt, unicode]{beamer}
% after
\documentclass[dvipdfmx]{beamer}

感想

去年の俺!何故ゼミ資料をGithubで管理しなかった!