Open78

LaTeX関係

ピン留めされたアイテム
ultimatileultimatile

\LaTeXの小ネタ集です.
VScodeとlatexmkを使ってXeLaTeXでBXjsclsをtypesetしてることが多いので関連する投稿が多いと思います.

\LaTeX何もわからないので間違っていたら教えてもらえると嬉しいです.

ultimatileultimatile

ダミーイメージの表示

\includegraphics[width=\textwidth]{example-image}
\includegraphics[width=\textwidth]{example-image-a}
\begin{figure}[h]\centering
\includegraphics[width=\textwidth]{example-image}
\caption{test}
\label{fig:example-image}
\end{figure}

reference

https://tex.stackexchange.com/questions/44195/placeholder-for-figure-includegraphics

comment

本当は\usepackage{MWE}が必要だけど\usepackge{graphicx}すると読み込まれているっぽい

ultimatileultimatile

文献関係でTwitterでバズってたやつなんだっけ
文献リストから引用箇所に飛べるやつだっけ...?
hyperlink.styのoption設定だった気がする

ultimatileultimatile

画像だけdraft mode

documentclassのoptionにdraftを入れるとtypesetが軽くなるdraft modeになる
その代わりに

\usepackage[draft]{graphicx}

すると画像だけdraft modeになり画像が表示されなくなりtypesetが早くなる.
基本的に画像renderingに時間がかかってるだけなのでこちらの方が良い気がする

reference

https://tech.motoki-watanabe.net/entry/2019/02/19/191832

ultimatileultimatile

BXjsclsのfigure環境では図と番号の間が空かない

bxjsarticleとかのBXjsclsを使うと図の番号が図1.1みたいになる.
本文中で参照すると図 1.1.

jsarticleで確認したら両方図 1.1だった.
BXjsclsのmanual確認したけどoptionでどうこうできなさそう.
たぶん\renewcommand{\thefigure}{~\arabic{chapter}.\arabic{figure}}とかすればいい話ではあるんだろうけど, 問題の根源が気になる...

図番号と”図”の間が空くのは正しいのか

多分英語だとFigure 1.1で空くのが普通だからそのまま"Figure"を"図"に置換すると空いてしまうんだと思うんだけど, 日本語的には空かないのが普通な気がする.
適当に教科書パラパラしてみたらみんな空いてる.

reference

https://ftp.jaist.ac.jp/pub/CTAN/language/japanese/BX/bxjscls/bxjscls-manual.pdf

comment

BXjsclsのoptionに出てくるcompatはcompatibleの略っぽい

ultimatileultimatile

BXjsclsのstyle fileの

\def\fnum@figure{\figurename\nobreak\thefigure}

にある\nobreakが原因なので
preambleで

\makeatletter
\def\fnum@figure{\figurename\thefigure}
\makeatother

とすれば良い.

tableは

\makeatletter
\def\fnum@table{\tablename\nobreak\thetable}
\makeatother
ultimatileultimatile

逆に本文中の参照にスペースを潰す方法が不明.
cleverefを使っており,

\crefname{figure}{\nobreak}{\nobreak}
%1つ目は参照先が1つの図のとき(Fig. X)
%2つ目は参照先が2つ以上の図のとき(Figs. X-Y), 日本語では区別しない.

は意味なし.

comment

こちらもmacroの再定義が必要...?
そもそも\nobreakって空白を潰すcommandだったっけ...

ultimatileultimatile

並置した図のcaptionの開始位置を揃える.

minipageを使って図を並置した場合, captionの開始位置がずれて見苦しくなることがある.
minipageの配置optionをtにすれば良い.

\begin{figure}[h]
    \begin{minipage}{0.5\hsize}\centering
        \includegraphics[width=\textwidth]{example-image-a}
        \caption{\lipsum[1]}
        \label{fig:1}
    \end{minipage}
    \begin{minipage}{0.5\hsize}\centering
        \includegraphics[width=\textwidth]{example-image-b}
        \caption{\lipsum[2]}
        \label{fig:2}
    \end{minipage}
\end{figure}

これが

\begin{figure}[h]
    \begin{minipage}[t]{0.5\hsize}\centering
        \includegraphics[width=\textwidth]{example-image-a}
        \caption{\lipsum[1]}
        \label{fig:1}
    \end{minipage}
    \begin{minipage}[t]{0.5\hsize}\centering
        \includegraphics[width=\textwidth]{example-image-b}
        \caption{\lipsum[2]}
        \label{fig:2}
    \end{minipage}
\end{figure}


こう

reference

https://tex.stackexchange.com/questions/371525/minipage-figure-caption-alignment

comment

図番号が(a)(b)とかになって良いのなら\usepackage{subcaption}して\caption\subcaptionにすれば良い.
referenceにあるけど画像の縦の大きさが揃ってない場合はちょっとめんどそう.

ultimatileultimatile

latexmkを使用されるdriverで使い分ける

latexmkは$pdf_modeの値で呼ばれるdriverが決まるっぽい.
実行時に普段設定しているdriverとは別のdriverを使いたい場合は$pdf_modeの値を実行時引数として直接指定できないので対応するoptionでdriverを指定する.

$pdf_mode driver option 流れ 使用される変数
0 (u)pLaTeX なし .tex→.dvi $latex
1 pdfLaTeX -pdf .tex→.pdf $pdflatex
2 (u)pLaTeX -pdfps .tex→.ps→.pdf $latex$dvips$ps2pdf
3 (u)pLaTeX -pdfdvi .tex→.dvi→.pdf $latex$dvipdf
4 LuaLaTeX -pdflua .tex→.pdf $lualatex
5 XeLaTeX -pdfxe .tex→.dvi→.pdf $xelatex$xdvipdfmx
terminal
latexmk -pdfdvi -pv hoge.tex

みたいな使い方をする.

reference

https://texwiki.texjp.org/?Latexmk
http://www2.yukawa.kyoto-u.ac.jp/~koudai.sugimoto/dokuwiki/doku.php?id=latex:latexmkの設定

comment

普通(u)pLaTeXは$pdf_mode=3

ultimatileultimatile

-xelatexというオプションもあるっぽい(謎)

latexmkのhelp
-pdfxe - generate pdf by xelatex
-xelatex      - use xelatex for processing files to pdf
ultimatileultimatile

-xelatex -pdfxe -dvi- -ps-と等価.(texdoc latexmkから)
dviとpsの出力をしないようにして-pdfxeを使用という意味になる

ultimatileultimatile

数式あり和洋混合文の書き方.

https://qiita.com/suigin/items/10960e516f2d44f6b6de
https://qiita.com/Ishotihadus/items/bbbb85f54e6a4e7aaac0

この辺を見つつtemplateを固めたい.

数式の標準記号があるらしい

数式マナーの根拠
物理系はIUPAPのred book
https://metrology.wordpress.com/measurement-process-index/iupap-red-book/index-iupap-red-book/
\mathrm{e}, \mathrm{d}, 転置: A^\mathrm{T}

化学系はIUPACのgreen book
それ以外の自然科学分野はISO80000-2?
JISはないっぽい JIS Z 8201-1981JIS Z 8000-2:2022
https://kikakurui.com/z8/Z8201-1981-01.html

日本工業規格 (JIS) では2022年に制定された JIS Z 8000-2:2022 が相当する。これに伴い、それまで ISO 80000-2 に相当する部分を担ってきた JIS Z 8201:1981 は廃止された[2][3]。

引用元: https://ja.wikipedia.org/wiki/ISO_80000-2
数学はAMS style guide...?
https://ja.wikipedia.org/wiki/立体活字

電荷素量eがitalicなのは物理定数であって数学定数ではないから.

The Art of \LaTeXは参考になりそう

和洋混合文の問題点

  • 全角括弧・全角句読点の存在
    日本語で組版する場合は全角括弧・全角句読点が正しいとされている(どこで?)
    一方で欧文では半角括弧・半角句読点が用いられている.
    英語を半角括弧で閉じて日本語は全角括弧で閉じると
(日本語(English))

のようになり))がキモい.
お前のお気持ちなんざ知るかという話だけど何とかならないものか...

  • 漢数字と英数字問題
  • 句読点はどれにするか問題
  • カタカナ表記か英語表記か

https://www.jtca.org/standardization/katakana_guide_3_20171222.pdf

  • 和洋混合文では文頭に英単語が来ても大文字にしない←文章としては日本語なので.
ultimatileultimatile

漢数字と英数字問題

わからん
1度 vs 一度
3角形 vs 三角形
第1原理 vs 第一原理

3角形より三角形の方が違和感ないけど, じゃあ六万五千五百三十七角形って書くのか?問題(Wikipediaは書いているけども...)

ultimatileultimatile

複数行comment outにcomment.styはいらんらしい

Twitterで見た

ultimatileultimatile

(x)color.styで{}で囲わなければ以降の文字色が全て変わる

ここまで黒文字
\color{blue}
ここは全部青文字
\color{red}
ここから全部赤文字
ultimatileultimatile

\footnote{\color{blue}}したらそれ以降の色の変更が無効化された????????

ここまで黒文字
\color{blue}
ここは全部青文字
\footnote{\color{blue}}
ここは全部黒文字??????
\color{red}
ここから全部赤文字
ultimatileultimatile

\makeatletter\makeatother@をエスケープしてるだけ

\renewcommandするときとかにたまに\makeatletter\makeatotherで囲まれたものがあるがsource fileに書くときはエスケープ(ではないが)しないといけないから必要ということらしい.

少しだけちゃんとした説明

\TeXでは文字ごとにcategory codeと呼ばれる0から15までの数字が割り振られているらしい.
英文字が11, 記号などのその他の文字は12である.
\makeatletter@のcategory codeを11に, \makeatother12にするcommand.
というわけでcategory codeをいい感じにしないといけないということらしい.
(@のcategory codeをなぜ11に変更しないといけないのかは要勉強)

category codeの説明

\TeX Wikiから引用

TeX 文書において文書ファイル中の個々の文字に割り当てられた分類番号。 例えば,TeX 文書のコマンドは通常,バックスラッシュ文字 (環境によっては円記号で表示されるが文字コードはバックスラッシュ文字と同一) で始まる文字列(\documentclass の類)だが, これはバックスラッシュ文字のカテゴリーコードが 0 に設定されていることによる (従って,ほかの文字のカテゴリーコードを 0 に変更すると, その文字をコマンドの記述に用いることができる)。

https://texwiki.texjp.org/?用語・略語集#yf2624dc

reference

http://latexref.xyz/_005cmakeatletter-_0026-_005cmakeatother.html
https://blog.wtsnjp.com/2017/03/31/tex-by-topic2/

comment

日本語のcategory codeはどうなっているんだろう. 12?

ultimatileultimatile

GitHubの数式renderingがバッキバキに壊れる件

複数の\sum\hatがあると壊れる?

TODO

  • MWEを作る
ultimatileultimatile

matplotlib周り

数式のfontをcomputer modern?にする

from matplotlib import rc
rc('text', usetex=True)

\bmとか使いたい場合

要は使いたいpackageをここで\usepackageする

plt.rcParams['text.latex.preamble'] = [r"\usepackage{amsmath,bm}"]

comment

これやるとズンドコ重くなるので注意

ultimatileultimatile

古い記法を使っていたら警告を出す

https://blog.goo.ne.jp/superspeed1963/e/4500867fef0c7711fb46f66cc093361b
より

古いコマンドやパッケージの利用を警告するもの
\RequirePackage[l2tabu, orthodox]{nag}
これを導入すると、現在では使用を避けた方が良いものを使っていた場合、タイプセット時に警告が出ます。

amsmath が提供しない数式環境を使用した場合に警告するもの
\usepackage[all, warning]{onlyamsmath}
これを導入すると、amsmath パッケージでの使用を避けた方が良いコマンドなどを使っていた場合、タイプセット時に警告が出ます

comment

amsmathの方は使ったらめっちゃ怒られてtypesetできなくなってとりあえず切ってしまった気がするのでまた時間があるときに確認したい.

ultimatileultimatile

\RequirePackage[l2tabu, orthodox]{nag}使っているときにalign環境をfootnote環境におくとtypesetが通らない

ultimatileultimatile

ZoteroでBibTeX fileの内容をclipboardにcopy

事前準備

  1. 適当な文献を右clickして選択されたアイテムから参考文献目録を作成...をclick
  2. スタイルを管理する..をclick
  3. 他の引用スタイルを入手する...をclick
  4. bibtexで検索するとBibTeX generic citation styleが出てくるのでclick
  5. 引用スタイル管理windowを閉じる

やり方

  1. BibTeX fileを出力したい文献を右clickして選択されたアイテムから参考文献目録を作成...をclick
  2. 引用スタイルlistからBibTeX generic citation styleをclickして選択
  3. 出力モードを参考文献目録, 出力方法をクリップボードにコピーにしてOKをclick

これで該当文献のBibTeX fileの内容がcopyされている.
改行が入らないので注意.
(Better BibTeXが必要なのかよく分かってない)

ultimatileultimatile

Recipe terminated with fatal error: spawn latexmk ENOENT.

VScodeでたまに出て \LaTeXのtypesetができなくなるやつ
大体再起動すれば直るけどムカつく.
error messageを調べるとlatexmkの居場所を見失っているらしい.

shellの環境解決ができない場合に発生している気がするけどよく分からない.
https://code.visualstudio.com/docs/supporting/faq#_resolving-shell-environment-fails

shellの初期化に10秒以上かかる場合は失敗するようになっているっぽい.
公式websiteを見ると時間がかかるところを特定してなんとかせいということが書いてあるっぽい.

pyenvの初期化を入れてるのが悪い気がする...

terminalからVScodeを起動するとshellの解決を行わないようにできるらしい.

ultimatileultimatile

center環境は常に避けるべきなのか問題

center環境をfigure環境などで使うと不必要に縦方向の空白が開くので代わりに\centeringを使うべきという話がある.
したがってfigure環境などの環境内では\centeringを使うべきであるが, そのような環境内ではない場合はどうなのだろう.

{\centering}とcenter環境の違いは\par(段落変更)が追加されるかどうかで, {\centering \par}\approxcenter環境っぽい.
figure環境も末尾に\parを追加するらしいのでfigure環境内でcenter環境を使うと\par\parみたいになってしまうので避けましょうとなっているのかもしれない(要確認).

https://texblog.net/latex-archive/floats/center-centering/

ultimatileultimatile

BibLaTeXの参考文献listのtitleに色を付ける

以下はerrorになる.

\printbibliography[title=\textcolor{red}{参考文献}]

よくわからないけどredREDに変換されてしまうらしくそんな色知らねーになるっぽいので黒魔術感がすごいけど

\definecolor{RED}{RGB}{255,0,0}

と大文字の色を用意してやれば良い.

comment

自分で書いててアレだけど需要が謎すぎる

ultimatileultimatile

XeLaTeXで日本語Beamer

fontいじると沼だけど他にもやってる人がいた
https://tizz.hatenadiary.org/entry/20100505/1273081758

ultimatileultimatile
  • \XeTeXlinebreaklocale "ja"がないと
\begin{frame}{タイトル}
    \begin{columns}
        \begin{column}{0.5\textwidth}
            \begin{itemize}
                \item ああああああああああああああ
                \item あああああああああああああああ
            \end{itemize}
        \end{column}
        \begin{column}{0.5\textwidth}
        \end{column}
    \end{columns}
\end{frame}

これが

こう

ultimatileultimatile

VScode latex-workshopのchktexに静かにしてもらう

VScodeのlatex-workshopの設定項目の
latex-workshop.linting.chktex.exec.args
からchktexに渡すoptionを指定することができるので
-n[警告ID]を追加する.
ここで[警告ID]には警告したくない警告IDを入れる.

ultimatileultimatile

数式に図を入れて縦に中央揃え

\begin{equation}
    \vcenter{\hbox{\includegraphics[width=0.2\textwidth]{example-image}}} = \vcenter{\hbox{\includegraphics[width=0.2\textwidth]{example-image-a}}} + \vcenter{\hbox{\includegraphics[width=0.2\textwidth]{example-image-b}}}
\end{equation}

ultimatileultimatile

統合セルを持つテーブルの作り方

\documentclass{beamer}
\usepackage{multirow}
\begin{document}
    \begin{frame}{Fused Table in Beamer}
        \begin{table}
            \begin{tabular}{|c|c|c|c|}\hline
                \multicolumn{2}{|c|}{\multirow{2}{*}{table}}  & \multicolumn{2}{|c|}{column} \\\cline{3-4}
                \multicolumn{2}{|c|}{}                        &  1 & 2                       \\\hline
                \multirow{2}{*}{\rotatebox{90}{row\ }}    & 1 & 11 & 12                      \\\cline{2-4}
                                                          & 2 & 21 & 22                      \\\hline
            \end{tabular}
        \end{table}
    \end{frame}
\end{document}


https://zenn.dev/ganariya/articles/latex-multi-row-and-column

ultimatileultimatile

class optionで挙動を切り替える

\documentclass[draft]{beamer} % Use the draft class option to enable draft mode

\makeatletter
\@ifclasswith{beamer}{draft}{
  % Draft mode
  \newcommand{\myitem}{\item First item}
}{
  % Not in draft mode
  \newcommand{\myitem}{\item Second item}
}
\makeatother

\begin{document}
\begin{frame}
  \frametitle{Conditional Itemize Example}

  \begin{itemize}
    \myitem % Use the custom item command
  \end{itemize}
\end{frame}
\end{document}

ultimatileultimatile

\frametitleがギリはみ出して2行になるときにちょっと左に動かして1行にする

%mの半分の幅だけ左にずらしている
\newlength{\charwidth}
\newlength{\halfcharwidth}
\newcommand{\hcharacter}{\settowidth{\charwidth}{m}\setlength{\halfcharwidth}{0.5\charwidth}}
\hcharacter % Calculate the width of the character "m" and store it in \charwidth
\begin{frame}[c]{\hspace{-\halfcharwidth} too long frametitle}
\end{frame}
%mの幅だけ左にずらしている
\newlength{\charwidth}
\newcommand{\hcharacter}{\settowidth{\charwidth}{m}}
\hcharacter % Calculate the width of the character "m" and store it in \charwidth
\begin{frame}[c]{\hspace{-\charwidth} too long frametitle}
\end{frame}

ultimatileultimatile

unicode-math\mathscr\mathcalを使い分ける

Unicodeではスクリプト体(\mathscr)とカリグラフィ体(\mathcal)が区別されないため,unicode-mathでは\mathscr\mathcalで同じ字形が表示されてしまう [1][2]

unicode-mathで利用可能なフォントの中で,unicode-mathの設定で\mathscr\mathcalで使い分けができるのは

  • SITX Two Math
  • NewComputerModernMath
  • XITS Math
  • KpMath
  • Gramond-Math

のみの模様.

フォント設定

それぞれのフォント設定は下記の通り.
共通して\usepackage{unicode-math}が事前に必要.
なお,Gramond-Mathは設定がss03ss08の2種類ある[3]
見た目は下画像を参照のこと.

SITX Two Math

\setmathfont{STIX Two Math}
\setmathfont{STIX Two Math}[
    range = { scr, bfscr },
    StylisticSet = 1
]

NewComputerModernMath

\setmathfont{NewComputerModernMath}
\setmathfont{NewComputerModernMath}[
    range = { scr, bfscr },
    StylisticSet = 1
]

XITS Math

\setmathfont{XITS Math}
\setmathfont{XITS Math}[
    range = { cal, bfcal },
    StylisticSet = 1
]

KpMath

\setmathfont{KpMath}
\setmathfont{KpMath}[
    range = { cal, bfcal },
    StylisticSet = 1
]

Gramond-Math (ss03)

\setmathfont{Garamond-Math}
\setmathfont{Garamond-Math}[
    range = { cal, bfcal },
    StylisticSet = 3
]

Gramond-Math (ss08)

\setmathfont{Garamond-Math}
\setmathfont{Garamond-Math}[
    range = { cal, bfcal },
    StylisticSet = 8
]

参考画像

参考文献

詳しくはこの記事を参照のこと.

脚注
  1. 何が起きるのかは下画像の一番上のDefaultを見ると分かる.デフォルトのLatin Modern Mathでは\mathscrが用意されていないためこちらも\mathcalで表示されている. ↩︎

  2. unicode-mathでは\mathscr/\mathcalではなく\symscr/\symcalで書くべきな模様.ただし,\mathscr/\mathcalで動きはする.詳しくはこの記事を参照のこと. ↩︎

  3. ss08という名前はStylisticSet = 8に対応している ↩︎

ultimatileultimatile

Latexmk: Stopping because of bad filename(s). (VScode, latex-workshop)

原因: file pathに~が入ってるとbuildに失敗する

https://github.com/James-Yu/LaTeX-Workshop/issues/1245#issuecomment-475875104

  • ↑"latex-workshop.latex.tools"の%DOC%%DOCFILEにするとよい?

https://okumuralab.org/tex/mod/forum/discuss.php?d=3247&parent=19500

  • %DOC%%DOCFILEなどの意味

https://teratail.com/questions/237087#reply-490306
より

%DOC% (ファイルのフルパスから拡張子を除いたもの)の代わりに %DOCFILE%(フォルダを含まないファイルの名前から拡張子を除いたもの)を指定すると、フォルダの日本語がlatexmkに渡されないので、正しくコンパイルできるようになると思います。

ultimatileultimatile

table環境やfigure環境において\label\captionに紐付いているっぽいので\label\captionの前においていけない

ultimatileultimatile

\mathrm\textの違い

\mathrmは数式用fontの立体,\textは本文fontの立体が使われる[要出典]

ultimatileultimatile

\middle\midしたい

  • \mid: 集合を定義するときに使う中棒.単に|とするのと比べると中棒の周囲に空白ができる.
    • \left, \rightに非対応.左右の\{, \}が大きくなっても\midは取り残される.
  • \middle: \left\rightに対応,ただし\midで空いていた空白がなくなる.
    したがって\middle\midしたくなるが,これはerror.なぜerrorなのかは下の記事に詳しく書いてある.

\newcommand{\suchthat}{\;\ifnum\currentgrouptype=16 \middle\fi|\;}

を定義して

$\left\{ a\in A \suchthat a \leq \frac12 \right\}$

のように使う.

他の方法

https://zrbabbler.hatenablog.com/entry/20120411/1334151482

ultimatileultimatile

\sum\prodみたいな演算子を自作する

big operatorとかいうらしい

こう書くと

% preambleに書く
\DeclareMathOperator*{\bigtimeordered}{\mathcal{T}}

こう

ultimatileultimatile

mactex install後 shellの再起動か以下のcommandを実行する必要がある

eval "$(/usr/libexec/path_helper)"
ultimatileultimatile

時間順序積

\usepackage{mathtools}
\newcommand{\myxleftarrow}[1]{\xleftarrow{\makebox[#1]{}}}
\DeclareMathOperator*{\Tprod}{
    \mathchoice
     {\mathrlap{\hspace{-0.1em}\longleftarrow}\prod}%display
     {\mathrlap{\hspace{-0.1em}\myxleftarrow{0.65em}}\prod}%textstyle
     {\mathrlap{\hspace{-0.025em}\scalebox{0.7}{$\myxleftarrow{0.7em}$}}\prod}%scriptstyle
     {\mathrlap{\scalebox{0.5}{$\myxleftarrow{0.8em}$}}\prod}%scriptscriptstyle
}

これが

\begin{equation}
    \Tprod_{i=3}^{6}f_{\Tprod_{i=3}^{6}f_{\Tprod_{i=3}^{6}f}}
\end{equation}   

こう

ultimatileultimatile

unicode-mathmathtoolsを同時に使うときwarningを出さない読み込み方

\usepackage{mathtools}% mathtoolsが先
\usepackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
ultimatileultimatile

数式上に書く斜線の色を変える

  • まず斜線を描くには\usepackage{cancel}
  • 色を変えるには\renewcommand{\CancelColor}{\color{red}}と書いておく
    • \usepackage{color}\usepackage{xcolor}が必要だと思う
  • \cancel{hoge}と書けばhogeに色のついた斜線が書かれる