かすみん日記

暇なときに何か喋ります

【beamer】frame環境内で\defコマンドを使う【LaTeX】

環境内などで\defコマンドによってマクロを定義すれば、その範囲(スコープ)内だけで使えるマクロになります(local macro)。

しかし、スライドのbeamerクラスで用意されるframe環境内で引数を取るlocal macroを定義しようと思ったら怒られました。

ダメ:

\begin{frame}{たいとる}{さぶ}

\def\hoge#1{\relax}

\end{frame}

%% エラー
%% -> Illegal parameter number in definition of \iterate.

どうやら#を使うのがまずいみたいです。

代償はよくわかりませんが、frame環境にfragileオプションを与えれば使えるようになります。

OK:

\begin[fragile]{frame}{たいとる}{さぶ}

\def\hoge#1{\relax}
こんにち\hoge{こんばん}\end{frame}

なんか、vrbという中間ファイルが生成されますが、タイプセット後に消せば問題ないでしょう。

以上。

tex.stackexchange.com

【LaTeX】数式番号にセクション番号を入れる(付録の修正についても)

数式番号にセクション番号を入れる方法を述べます。

標準(jsarticle.cls)なら、数式番号は全セクションを通して(1), (2), ...のように出力されるかと思います。

これにセクション番号を入れて、(1.1), (1.2), ..., (2.1), ...のように出力されるようにします。

ついでに、数式番号だけじゃなくて図や表の番号もそういうスタイルに変更します。

環境

バージョン違っても多分大丈夫だと思いますが、想定している文書クラスが違うとダメかもしれないです。

  • TeXLive 2019
  • uplatex + dvipdfmx
  • 文書クラス:jsarticle.cls

方法

プリアンブル(\documentclass\begin{document}の間)に下記コードを追加します:

\makeatletter
\@addtoreset{equation}{section}
\@addtoreset{figure}{section}
\@addtoreset{table}{section}
\makeatother

\renewcommand{\theequation}{\thesection.\arabic{equation}}
\renewcommand{\thefigure}{\thesection.\arabic{figure}}
\renewcommand{\thetable}{\thesection.\arabic{table}}

これでokと言いたいところですが、これでは\appendix以降の付録のセクション中では、数式番号が(付録A.1)のように出力されてしまいます。

数式番号には付録という文字を入れたくないので、jsarticle.clsで定義されている\appendixコマンドを改造します。

ちなみに、jsarticle.clsの場所が知りたいときは、ターミナルでkpsewhich jsarticle.clsと打つとファイルのパスを教えてくれます。

さて、\appendixコマンドを以下のように再定義します。 プリアンブルに追加してください。

\makeatletter
\renewcommand{\appendix}{\par
  \setcounter{section}{0}%
  \setcounter{subsection}{0}%
  \gdef\presectionname{\appendixname}%
  \gdef\postsectionname{}%
  \gdef\thesection{\presectionname\@Alph\c@section\postsectionname}%
  \gdef\thesubsection{\@Alph\c@section.\@arabic\c@subsection}%
  %% 追加
  \renewcommand{\theequation}{\@Alph\c@section.\arabic{equation}}%
  \renewcommand{\thefigure}{\@Alph\c@section.\arabic{figure}}%
  \renewcommand{\thetable}{\@Alph\c@section.\arabic{table}}%
}
\makeatother

これで、付録のセクション中での数式番号は(A.1), (A.2), ...のようになります。

\thesectionを再定義してしまうと、見出しや目次などで付録の文字が表示されなくなってしまうので注意です。

また、もう一つ補足として、セクションが無い場合には、数式番号が(0.1), (0.2), ...のように、セクション番号が0と扱われて出力されます。

1ページのアブストなどの文書ではセクションは使わないので、そのときは元に戻したいです。

プリアンブルをstyファイルにしていろんな文書で使い回してる人には、if文でなんとか条件分けして欲しいところです。

ということで、以下のような修正案を提示します:

\renewcommand{\theequation}{%
  \ifnum\thesection>0
    \thesection.\arabic{equation}%
  \else
    \arabic{equation}%
  \fi
}

セクションがある(セクション番号が0より大きい)ときにだけ、数式番号にセクション番号を追加します。

行末の%は取っちゃダメです。余計なスペースが入ります。

まとめとサンプル

以上でもう文句はないかと思います。

最後に全部まとめた、タイプセット可能なサンプルコードを書いておきます。

%% uplatex -> dvipdfmx
\documentclass[uplatex]{jsarticle}

\usepackage{amsmath}

\makeatletter

\@addtoreset{equation}{section}
\@addtoreset{figure}{section}
\@addtoreset{table}{section}

\renewcommand{\theequation}{%
  \ifnum\thesection>0
    \thesection.\arabic{equation}%
  \else
    \arabic{equation}%
  \fi
}
\renewcommand{\thefigure}{%
  \ifnum\thesection>0
    \thesection.\arabic{figure}%
  \else
    \arabic{figure}%
  \fi
}
\renewcommand{\thetable}{%
  \ifnum\thesection>0
    \thesection.\arabic{table}%
  \else
    \arabic{table}%
  \fi
}

\renewcommand{\appendix}{\par
  \setcounter{section}{0}%
  \setcounter{subsection}{0}%
  \gdef\presectionname{\appendixname}%
  \gdef\postsectionname{}%
  \gdef\thesection{\presectionname\@Alph\c@section\postsectionname}%
  \gdef\thesubsection{\@Alph\c@section.\@arabic\c@subsection}%
  %% 追加
  \renewcommand{\theequation}{\@Alph\c@section.\arabic{equation}}%
  \renewcommand{\thefigure}{\@Alph\c@section.\arabic{figure}}%
  \renewcommand{\thetable}{\@Alph\c@section.\arabic{table}}%
}

\makeatother

\begin{document}

\section*{イントロ}
数式(\ref{eq:Euler})はオイラーの公式です(図\ref{fig:Euler}や表\ref{tab:Euler}を参照).
\begin{align}
  e^{i \theta} = \cos\theta + i \sin\theta
  \label{eq:Euler}
\end{align}
\begin{figure}
  \caption{オイラー}
  \label{fig:Euler}
\end{figure}
\begin{table}
  \caption{オイラー}
  \label{tab:Euler}
\end{table}

\section{にゃあ}
にゃお〜.数式(\ref{eq:nyaa})はにゃんこです(図\ref{fig:nyaa}や表\ref{tab:nyaa}を参照).
\begin{align}
  1 + 1 = 3
  \label{eq:nyaa}
\end{align}
\begin{figure}
  \caption{にゃあ}
  \label{fig:nyaa}
\end{figure}
\begin{table}
  \caption{にゃあ}
  \label{tab:nyaa}
\end{table}

\appendix
\section{にゃ〜ん}
付録にゃ.数式(\ref{eq:nyan})は付録のにゃんこです(図\ref{fig:nyan}や表\ref{tab:nyan}を参照).
\begin{align}
  1 + 1 = 3
  \label{eq:nyan}
\end{align}
\begin{figure}
  \caption{にゃ〜ん}
  \label{fig:nyan}
\end{figure}
\begin{table}
  \caption{にゃ〜ん}
  \label{tab:nyan}
\end{table}

\end{document}

タイプセット結果:

f:id:geniusium:20220208090946p:plain

以上です。お疲れさまでした。

ZoteroのBibTeX書式出力を見やすくする【CSL】

最近、論文などの文献管理ツールをMendeleyからZoteroに乗り換えました。

Zoteroでは登録した文書を右クリックして、メニューから「参考文献目録を作成」を選択すれば、好きな形式で文献情報を取得できます。

LaTeXで参考文献を記載する場合はbibファイルを用意して、BiBTeXで出力するのが一般的かと思います。

標準ではbibファイルに記載するBibTeX用のスタイルは用意していないので、自分でネットからダウンロードします。

「環境設定(cmd + ,)」->「引用」タブを開き、「他の引用スタイルを入手する」をクリックし、Zoteroのスタイルが配布されているサイトで「bibtex」と検索すると「BibTeX generic citation style」というスタイルがヒットするので、それをクリックします。

bibtex.cslというファイルがDLされると思うので、それをZoteroで開きます(多分ファイルをダブルクリックすると自動で開く)。

これでインストールが完了し、あとは登録してある文献を右クリックで表示されるメニューから「参考文献目録を作成」を選択し、「引用スタイル」の窓から「BibTeX generic citation style」を選択すればbibファイル用のスタイルが出力されます(クリップボードにコピーされる)。

%% 例えば↓
 @article{Aharony_Gubser_Maldacena_Ooguri_Oz_2000, title={Large N Field Theories, String Theory and Gravity}, volume={323}, ISSN={03701573}, DOI={10.1016/S0370-1573(99)00083-6},  note={arXiv: hep-th/9905111}, number={3–4}, journal={Physics Reports}, author={Aharony, O. and Gubser, S. S. and Maldacena, J. and Ooguri, H. and Oz, Y.}, year={2000}, month={Jan}, pages={183–386} }
%% 全部1行で書かれている

で、まあこれでBibTeXを利用するには十分なのですが、上のスタイルにはいいところで改行が含まれていないので、視覚的に見づらいです。

なので、カンマの後とかにいい感じに改行を追加したスタイルを以下で配布しておきます。

こちらのスタイルだと、以下のように「見やすく」出力してくれます。

@article{Aharony_Gubser_Maldacena_Ooguri_Oz_2000,
  title = {Large N Field Theories, String Theory and Gravity},
  volume = {323},
  ISSN = {03701573},
  DOI = {10.1016/S0370-1573(99)00083-6},
  note = {arXiv: hep-th/9905111},
  number = {3–4},
  journal = {Physics Reports},
  author = {Aharony, O. and Gubser, S. S. and Maldacena, J. and Ooguri, H. and Oz, Y.},
  year = {2000},
  month = {Jan},
  pages = {183–386}
}

gistにファイルをうpしておいたので、勝手にDLしてください。

ZoteroのBibTeX出力のスタイル(Citation Style Language) · GitHub

追加方法はさっきと同じで、DLして(解凍した)cslファイルをZoteroで開けばいいです。

補足

cslファイルといっても、中身はただのXMLです。

なので、改行とかのエスケープ文字はXMLのものを使えばいいです。

また、拡張子になっているcslはCitation Style Languageという意味で、これはZotero以外にも使われているようです。

CSLのドキュメントは以下のサイトにあります。

docs.citationstyles.org

それでは、みなさんも論文執筆頑張ってください。

【Magic Keyboard】Remove right ctrl key top

f:id:geniusium:20220109112148j:plain

Mac用のApple純正のMagic Keyboard(US配列)の右ctrlキーが調子悪かったので、キートップを外してみた。 その作業ログです。

動画にすべきでしたが、面倒なので写真だけです。

まず、とにかく薄くて固いものを用意します。 私はヘアピンでやりました。

今回外す右ctrlキーの場合は、キーの「下から」薄くて固いもの(以下ヘアピン)を差し込んで、てこの原理で上に持ち上げます。 パキッと音がするかはわからないですが、そんな感じでパキッとキートップの下部分だけをまずは外します。

下部分が外れたら、少し持ち上げつつ上(キーボードと平行)にスライドします。 キートップの上部分は引っかかってるだけなので、そのまま外れます。

f:id:geniusium:20220109113554j:plain

外し方は以上です。 付け直すときは逆の手順で、上部をはめてから下部を添えて、パチッとなるまで下部を押し込む。

ひとつ注意しておくと、キーによってキートップの固定のされ方が異なります。 右ctrl(多分、最下段の他の装飾キーも)の場合は下→上の順で外しますが、アルファベットとかのキーは上→下の順で外すみたいです(いくつか動画観た感じ)。

以下は修復作業のログと感想です。

調子の悪かったキートップを開けてみると、いくつか変形している箇所がありました。 今回、外し方がよくわからずパワーでゴリ開けたような感じになってしまったので、そのときに変形したのか、元から変形していたから調子悪かったのかはわかりませんが、とにかくそれを修復しました。

下の画像で赤丸で囲った3ヶ所が曲がっていたり潰れていたりしたので、とにかく固くて引っ掛かりのあるもの(ヘアピン)でグイッと曲げ直して修復しました。

f:id:geniusium:20220109113917j:plain

下の赤丸の金属のΓの上の部分が潰れていたので、ヘアピンを引っかけて引き延ばした。 これは直した後の画像。

f:id:geniusium:20220109114439j:plain

反対側も、多分開けるときにミスって変形していた。 ずっと上から外すものだと思っていて、良くない方向に力がかかったからだと思う。

f:id:geniusium:20220109114541j:plain

クソ見づらいけど、キートップの裏面のプラスチックの部分も変形していたので曲げ直した。

f:id:geniusium:20220109114843j:plain

キートップの裏側。 下の内側のところがパチッとはまる。

f:id:geniusium:20220109115852j:plain

MacBookのスペースキーを外したときは支柱がボキボキに折れてしまったが、今回はパワーでこじ開けたにも関わらず修復可能な変形だけで済んで良かった。 バタフライ型よりシザー型が丈夫というのはこのことなのかなと思った。

ということで、以上。

みなさんは壊さないように注意してやりましょう。

【LaTeX】複数行の数式の式番号を中央にひとつだけ表示する

LaTeXにおいて、align環境で表示する数式が複数行にわたるときに、それらの縦方向の中央にただひとつだけの数式番号を表示させるには、align環境内において、数式をsplit環境で囲むことによって実現できる。

\documentclass{jsarticle}
\usepackage{amsmath}
\usepackage{amssymb}

\begin{document} 

\begin{align}
  \begin{split}
    ds^2 = - A(r) dt^2 + B(r) dr^2 + r^2 (d\theta^2 + \sin^2\theta d\phi^2), \\
    0 \le r \le \infty, \quad
    0 \le \theta < \pi, \quad
    0 \le \phi < 2\pi
  \end{split}
\end{align}

\end{document}

2行にわたる数式の中央に式番号が表示される。

f:id:geniusium:20211231045047p:plain

参考

newbedev.com

【LaTeX】改行(行分割)を禁止するコマンド\nobreak

改行を禁止するコマンド

その箇所での行分割を禁止するには\nobreakと書きます。

行分割を許さないスペースはチルダ(tilde)~という1文字のコマンドで挿入できます。

与太話

LaTeXにおいて、ここでは改行してほしくないというタイミングで改行されてしまうことがたまにあります。

例えば、\citeコマンドで参考文献を参照するときに、\citeの直前では改行してほしくありません。

ほげほげ〜であることが知られています\cite{hoge}

という文章で、以下のように組版されることがあります。

ほげほげ〜であるこ
とが知られています
[1]。

このような場合には、以下のようになってほしいわけです。

ほげほげ〜であるこ
とが知られていま
す[1]。

そう言った場合には\nobreakコマンドを使えば、特定の箇所における行分割を禁止することができます。

ほげほげ〜であることが知られています\nobreak\cite{hoge}

念のため\citeコマンドの直前には毎回\nobreakコマンドを挿入すべきですが、さすがにそれは面倒なので、マクロを定義して使いましょう。

例えば、\citeコマンドの代わりに、以下で定義する\bibコマンドを使うことにしましょう。

\newcommand\bib[1]{\nobreak\cite{#1}}
% ...
ほげほげ〜であることが知られています\bib{hoge}

\citeコマンドの直前以外にも必要な場面は多々ありそうです。

すぐに思いつくものとしては、以下のようなところでしょうか。

ほげほげは\ref{sec:hoge}\nobreak 節の図\nobreak\ref{fig:hoge}を参照。

英語の文章であれば、そのようなところには大抵スペースも伴うので、行分割を禁止するスペースとしてチルダ~コマンドが用意されています。

日本語だとスペースは余計なので、~ではなく\nobreakを使うべきですね。

以上です。

参考

ググっても全然出てこなかったので、一応記事にしておきました。

下記の文献で\nobreakコマンドを見つけることができました。

  • 吉永徹美『独習LaTeX2e』

有名な『美文書』より詳しい気がします。

アフィリエイトは無いのでAmazonリンクは自分でググってください。

210番道路の双子のライチュウの素早さ【ダイパリメイク】

f:id:geniusium:20211229193824j:plain

ズイのタウン上の210番道路にいる双子が使うLv.60のライチュウの素早さを調べたので報告しておきます。

LV.60のライチュウの素早さ(種族値110)の実数値は150です。

性格補正なし、努力値無振りであれば固体値22~23みたいです。

固体値の推定は下記サイトを参考にしました。

pokecosmos.github.io

蛇足

タマゴ孵化→レベル上げの流れで、「ほのおのからだ」か「マグマのよろい」持ちポケモンでそのまま双子にバトル挑めたら楽だなと思って少し考えた。

レベル補正(低レベルほど多く経験値をもらえる)を利用して一気にレベル上げすることが目的なので、双子のポケモン(ピクシーとライチュウ)を一度に倒さねばならない。 つまり、特性が「ほのおのからだ」か「マグマのよろい」で、かつ攻撃範囲が相手全体(と味方)である技を覚えるポケモンを用意しなければならない。

なお、味方にも攻撃が及ぶ場合は、レベル上げしたいポケモンを後続の耐久要因に入れ替えるか、「まもる」を覚えさせて使わないといけないという手間が増える。 ポケモンを入れ換えるなら、タマゴ孵化用以外のポケモンを用意することになるので、そもそもの目的に反している。 「まもる」を覚えさせるのはシンプルにダルい。 ということで、特性が「ほのおのからだ」か「マグマのよろい」で、かつ攻撃範囲が相手全体である技を覚えるポケモンをリストしてみた。

まず、何も考えなくて良いのがファイヤーに「やきつくす」を覚えさせるパターン。 しかし、ファイヤーはパール限だし、1体しか手に入らないので、バトルで使いたい場合は孵化要員にできない。

次に挙げられるのが、ヒードランとブーバーン。 ヒードランも1体しか手に入らないのと、ブーバーンはパール限(+通信交換)なので、他で事足りるならそうしたいところ。 また、ヒードランの場合は「ねっぷう」か「いわなだれ」を覚えさせることになるが、どちらも命中率が90%という不安。 「こうかくレンズ」を持たせても命中率99%なので、若干の不安がある。 ブーバーンの場合は「いわなだれ」しか選択肢がない。

最後に残ったのが、マグカルゴバクーダマグカルゴなら「やきつくす」、バクーダなら「ふんか」が命中率100%である。 攻撃・特攻・素早さの種族値、技の威力がマグカルゴよりバクーダの方が上回っているので、以降はバクーダだけ考える。 心配だったのが、バクーダの素早さの種族値が40と低いので、ライチュウの素早さ(種族値110)抜けるのかということ。 記事の初めに書いたように、双子のライチュウはどうやら努力値や性格補正はないようなので、結論としてはまあなんとか抜ける。 といっても、例えば素早さ種族値40のバクーダで双子のライチュウを抜くには、性格上昇・固体値31・努力値252であってもレベル77が必要になる。 「こだわりスカーフ」を持たせればレベル50丁度で抜く。

次に心配なのが、相方のピクシーの耐久。 ライチュウの素早さを抜けたとしても、ピクシーを一発で落とすのが難しい。 以下ではとりあえず、双子のピクシーのHP・特防は固体値31で努力値0、性格補正なしのLv.60と仮定する。 このピクシーを、特攻固体値31・努力値252・性格補正なしのバクーダの「ふんか」(威力150)一発で落とすには、Lv.73以上が必要らしい。 性格補正で特攻上昇していれば、Lv.70以上でOK。 性格補正なしで「こだわりメガネ」を持たしていれば、Lv.57以上でOK。

というわけで、条件を満たすバクーダとしては、例えば以下のようなパターンがある。

レベル 性格補正
特攻 / 素早さ
固体値
特攻 / 素早さ
努力値
特攻 / 素早さ
持ち物
70以上 + / -,0,+ 31 / 31 252 / 252 こだわりスカーフ
77以上 0,+ / + 31 / 31 252 / 252 こだわりメガネ
100 -,0,+ / 0,+ 0以上 / 3以上 252 / 252 なし

ライチュウを抜くことができる、素早さの実数値が151以上になるパターンは

レベル 性格補正 個体値 努力値 持ち物
50以上 + 31 252 こだわりスカーフ
56以上 0 31 252 こだわりスカーフ
61以上 + 0 252 こだわりスカーフ
68以上 0 0 252 こだわりスカーフ
68以上 - 0 252 こだわりスカーフ
77以上 + 31 252 なし
81以上 0 31 252 なし
91以上 + 0 252 なし
100 0 3以上 252 なし
100 - 20以上 252 なし

体力満タンの「ふんか」でピクシーを確定1発で落とせるパターンは

レベル 性格補正 個体値 努力値 持ち物
57以上 + 31 252 こだわりメガネ
60以上 0 31 252 こだわりメガネ
60以上 + 0 252 こだわりメガネ
63以上 0 0 252 こだわりメガネ
67以上 - 0 252 こだわりメガネ
70以上 + 31 252 なし
73以上 0 31 252 なし
73以上 + 0 252 なし
77以上 0 0 252 なし
81以上 - 0 252 なし
93以上 - 0 0 なし

ダメージ計算は下記サイトを参考にしました。

www.pokesol.com

ピクシーのステータスはあくまで仮定で計算したので、実際のところはわからないが、とりあえず理想個体のバクーダを用意してLv70ぐらいまで上げれば、確定1発で落とせるようになるはず。

一応、「こだわりスカーフ」を持たせた以下のバクーダの「ふんか」でピクシーは落とせた。 特攻の個体値は「まあまあ」で、努力値は252振ってある。

f:id:geniusium:20211229202537j:plain

まあ、そもそもこんな話に需要はないだろう。

以上!

f:id:geniusium:20211229194825j:plain