Atom で BibTeX 環境を整える

 

はじめに

ようやく重たい腰を上げて、 BibTeX 環境を整えることにした。
理想は、BibTeX ファイルをそれ専用のフォルダに置き、
Atom のパッケージ latexer を機能させること。
あと、理解できなかったので、latexmk ファイルに手を出さないこと(白目)。

 

環境

 

BibTeX を専用フォルダに置く

カレントディレクトリにいちいちファイルを作るのは、とても面倒なので、
TeX Live で用意されているフォルダ

C:/texlive/texmf-local/bibtex/bib/local

に、BibTeX ファイルを置くことにする。(もちろん、このフォルダである必要はない)
ここでは、ファイル名を「foo.bib」とし、参照リストも作成し終えたものとする。

 

BibTeX の読み込み

参考文献を置きたいタイミングで、TeX ソースコードに下を書く。

\bibliographystyle{amsplain}
\bibliography{C:/texlive/texmf-local/bibtex/bib/local/foo.bib}

すると、\cite{ とタイプするだけで、検索ボックスと候補が並ぶ。
(著者名や論文名で検索をかけて、該当するものを Enter)
ここで、上記ではファイル名の絶対パスを指定しているが、
「¥」や「\」ではなく「/」でフォルダを区切っているので、注意。

 

BibTeX 用フォルダを使わない場合(非推奨)

一応、上記以外の方法も紹介しておく。
まず、BibTeX ファイル「foo.bib」をカレントディレクトリにおく。
(毎回ファイルを作ることになるため、非推奨としている)
参考文献を置きたいタイミングで、TeX ソースコードに下を書く。

\bibliographystyle{amsplain}
\bibliography{foo}

 

感想

ものすごく単純なことに半日を費やしてしまった。
難しいことを何もしなくていいのに、これになかなか気づけなかった・・・。
変に理解不能なマクロを組まずに済んだので、良しとしよう・・・。

ちなみに、自分は documentclass を article や amsart でやっているので、
LaTeX Font: Font shape `JT1/gt/m/it' undefined using `JT1/gt/m/n' instead
などと、フォントに関する注意がたくさんでる。
これは jsarticle でやれば、注意がでなくなるので、気にしないことにした。
消す方法は他にもあるけど、TeX ソースコードに変なこと書きたくないし。

 

Atom で TeX 環境を整える

 

環境

OS: Windows 10 (64 bit) (←32 bit 版ではない)
※ OS が異なる場合、差異が生じますので、ご容赦ください。
 

インストール

AtomTeX Live をインストールする。

1.Atom のインストール

  • Atom 公式サイト https://atom.io/ を開く。
  • 下のようなボタンがあるので、クリックする。

  • フォルダ「ダウンロード」を開くと、ファイル「AtomSetup-x64.exe」があるはずなので、それをダブルクリックして実行する。

2.TeX Live のインストール

※とても時間がかかるので、TeX Live のインストールは寝る前などがおすすめ。

f:id:lightology:20180125150238p:plain

  • フォルダ「ダウンロード」を開くと、ファイル「install-tl-windows.exe」があるはずなので、それを右クリックして、「管理者として実行」をする。

 ※上手く行かなければ、TeX Live - TeX Wiki を参考に、TeX Live をインストールする。
 

Atom の設定

1.パッケージのインストール

  • 初回起動の際、下のようなボックスが出るので「No, Never」を選択

  • キーボードの「Ctrl」と「,」を同時押下(以下、「ctrl-,」と書く)し、「Settings」を開く。
  • 下のように「Install」をクリックし、パッケージ名を検索してインストールする。

  • 以下のパッケージを検索して、インストール。
latex
latexer
language-latexsimple
pdf-view
project-manager
file-icons
japanese-menu

※「language-latex」だと数式中で Snippets が機能しないので、現状では「language-latexsimple」がおすすめ。

2.個人設定

  • 下の順でクリックし、個人設定(ファイル名「config.cson」)を開く。

  • そこに以下を追加で書き込み、「ctrl-s」を同時押下して保存。

(下のをコピペするなら、カーソルを乗せると、右らへんに「select」ボタンが現れるので、そこをクリック)

"*":
  "autocomplete-plus":
    confirmCompletion: "enter"
  core:
    telemetryConsent: "no"
  editor:
    showIndentGuide: true
    showInvisibles: true
  latex:
    cleanPatterns: [
      "**/*.aux"
      "**/*.aux.bak"
      "**/*.bbl"
      "**/*.bcf"
      "**/*.blg"
      "**/*.dvi"
      "**/*.fdb_latexmk"
      "**/*.fls"
      "**/*.idx"
      "**/*.idx.bak"
      "**/*.ilg"
      "**/*.ind"
      "**/*.lof"
      "**/*.log"
      "**/*.lol"
      "**/*.lot"
      "**/*.nav"
      "**/*.out"
      "**/*.ps"
      "**/*.snm"
      "**/*.synctex.gz"
      "**/*.toc"
      "/**/_minted-{jobname}"
      "/{output_dir}/sage-plots-for-{jobname}.tex"
      "/missfont.log"
      "/texput.log"
      "/texput.aux"
    ]
    engine: "platex"
  "pdf-view":
    fitToWidthOnOpen: true
  "project-manager":
    alwaysOpenInSameWindow: true
  welcome:
    showOnStartup: false
".latex.tex.text":
  "bracket-matcher":
    autocompleteCharacters: [
      "()"
      "[]"
      "{}"
      "$$"
    ]
  editor:
    tabLength: 4
    tabType: "hard"

3.シートの設定

  • そこに以下を追加で書き込む。
atom-text-editor {
  .syntax--math {
    color: hsl(128, 80%, 40%);
  }
}

 

更に頑張って設定

以上の設定で十分機能するが、より便利にし、なおかつ Atom の使い方を理解するために、以下の設定をする。

1.「project-manager」の設定

  • 予め TeX フォルダを作成しておく。

 ※ドキュメントフォルダ下に作らないこと。
  Windows 10 になってから、アクセス権の関係で TeX Live がうまく機能しないことがある。

  • 「ctrl-shift-a」を同時押下し、ドキュメントフォルダ内の TeX フォルダを選択し「フォルダーの選択」を押す。
  • 「ctrl-\(または ctrl-¥)」を同時押下し、下のような TeX のプロジェクトツリーが表示されるのを確認。

  • 「ctrl-shift-p」を同時押下し、コマンドパレットを開く。

  • コマンドパレットの検索欄に
Project Manager: Save Project

を入力し、これを実行する。

  • 以下のような画面が現れるので、「Save」を押す。

2.Snippets の設定

  • 「パッケージ」→「Package Generator」→「Generate Atom Package」とクリック。

  • 現れたパレットの「my-package」を「my-snippets-latex」に書き換え「Enter」を押下。

  • 「my-snippets-latex」内のフォルダとファイルをすべて削除。
  • フォルダ「snippets」を作成。

  • フォルダ「snippets」内にファイル「symbols-greek.cson」を作成し、そこに以下を書き込む。
'.math.latex':
  '\\alpha':
    'prefix': 'a'
    'body': '\\\\alpha'
  '\\beta':
    'prefix': 'b'
    'body': '\\\\beta'
  '\\Gamma':
    'prefix': 'G'
    'body': '\\\\Gamma'
  '\\gamma':
    'prefix': 'g'
    'body': '\\\\gamma'
  '\\Delta':
    'prefix': 'D'
    'body': '\\\\Delta'
  '\\delta':
    'prefix': 'd'
    'body': '\\\\delta'
  '\\epsilon':
    'prefix': 'ep'
    'body': '\\\\epsilon'
  '\\varepsilon':
    'prefix': 'vep'
    'body': '\\\\varepsilon'
  '\\zeta':
    'prefix': 'z'
    'body': '\\\\zeta'
  '\\eta':
    'prefix': 'et'
    'body': '\\\\eta'
  '\\Theta':
    'prefix': 'Th'
    'body': '\\\\Theta'
  '\\theta':
    'prefix': 'th'
    'body': '\\\\theta'
  '\\vartheta':
    'prefix': 'vth'
    'body': '\\\\vartheta'
  '\\iota':
    'prefix': 'i'
    'body': '\\\\iota'
  '\\kappa':
    'prefix': 'k'
    'body': '\\\\kappa'
  '\\Lambda':
    'prefix': 'L'
    'body': '\\\\Lambda'
  '\\lambda':
    'prefix': 'l'
    'body': '\\\\lambda'
  '\\mu':
    'prefix': 'm'
    'body': '\\\\mu'
  '\\nu':
    'prefix': 'n'
    'body': '\\\\nu'
  '\\xi':
    'prefix': 'x'
    'body': '\\\\xi'
  '\\Pi':
    'prefix': 'p'
    'body': '\\\\Pi'
  '\\pi':
    'prefix': 'p'
    'body': '\\\\pi'
  '\\varpi':
    'prefix': 'vp'
    'body': '\\\\varpi'
  '\\rho':
    'prefix': 'r'
    'body': '\\\\rho'
  '\\varrho':
    'prefix': 'vr'
    'body': '\\\\varrho'
  '\\Sigma':
    'prefix': 'S'
    'body': '\\\\Sigma'
  '\\sigma':
    'prefix': 's'
    'body': '\\\\sigma'
  '\\varsigma':
    'prefix': 'vs'
    'body': '\\\\varsigma'
  '\\tau':
    'prefix': 't'
    'body': '\\\\tau'
  '\\Upsilon':
    'prefix': 'U'
    'body': '\\\\Upsilon'
  '\\upsilon':
    'prefix': 'u'
    'body': '\\\\upsilon'
  '\\Phi':
    'prefix': 'Ph'
    'body': '\\\\Phi'
  '\\phi':
    'prefix': 'ph'
    'body': '\\\\phi'
  '\\varphi':
    'prefix': 'vph'
    'body': '\\\\varphi'
  '\\chi':
    'prefix': 'c'
    'body': '\\\\chi'
  '\\Psi':
    'prefix': 'Ps'
    'body': '\\\\Psi'
  '\\psi':
    'prefix': 'ps'
    'body': '\\\\psi'
  '\\Omega':
    'prefix': 'O'
    'body': '\\\\Omega'
  '\\omega':
    'prefix': 'o'
    'body': '\\\\omega'
  '\\varGamma':
    'prefix': 'vG'
    'body': '\\\\varGamma'
  '\\varDelta':
    'prefix': 'vD'
    'body': '\\\\varDelta'
  '\\varSigma':
    'prefix': 'vS'
    'body': '\\\\varSigma'
  '\\varUpsilon':
    'prefix': 'vU'
    'body': '\\\\varUpsilon'
  '\\varTheta':
    'prefix': 'vTh'
    'body': '\\\\varTheta'
  '\\varPhi':
    'prefix': 'vPh'
    'body': '\\\\varPhi'
  '\\varLambda':
    'prefix': 'vL'
    'body': '\\\\varLambda'
  '\\varPsi':
    'prefix': 'vPs'
    'body': '\\\\varPsi'
  '\\varXi':
    'prefix': 'vX'
    'body': '\\\\varXi'
  '\\varOmega':
    'prefix': 'vO'
    'body': '\\\\varOmega'
  '\\varPi':
    'prefix': 'vP'
    'body': '\\\\varPi'
  '\\varkappa':
    'prefix': 'vk'
    'body': '\\\\varkappa'
  • フォルダ「snippets」内にファイル「symbols-hebrew.cson」を作成し、以下を書き込む。
'.math.latex':
  '\\aleph':
    'prefix': 'aleph'
    'body': '\\\\aleph'
  '\\digamma':
    'prefix': 'digamma'
    'body': '\\\\digamma'
  '\\beth':
    'prefix': 'beth'
    'body': '\\\\beth'
  '\\daleth':
    'prefix': 'daleth'
    'body': '\\\\daleth'
  '\\gimel':
    'prefix': 'gimel'
    'body': '\\\\gimel'
  • フォルダ「snippets」内にファイル「brackets.cson」を作成し、以下を書き込む。
'.math.latex':
  '\\left \\right':
    'prefix': 'left-right'
    'body': '\\\\left $1 \\\\right $0'
  '()':
    'prefix': 'soft-b'
    'body': '\\\\left ( $1 \\\\right )$0'
  '{}':
    'prefix': 'curly-b'
    'body': '\\\\left \\\\{ $1 \\\\right \\\\}$0'
  '[]':
    'prefix': 'hard-b'
    'body': '\\\\left [ $1 \\\\right ]$0'
  '||':
    'prefix': 'abs'
    'body': '\\\\left | $1 \\\\right |$0'
  '|| ||_{}':
    'prefix': 'Norm'
    'body': '\\\\left \| $2 \\\\right \|_{$1}$0'
  '|| ||':
    'prefix': 'norm'
    'body': '\\\\left \| $1 \\\\right \|$0'
  '\\Bra':
    'prefix': 'Bra'
    'body': '\\\\Bra{$1}$0'
  '\\Ket':
    'prefix': 'Ket'
    'body': '\\\\Ket{$1}$0'
  '\\Braket':
    'prefix': 'Braket'
    'body': '\\\\Braket{ $1 | $2 }$0'
  '\\Set':
    'prefix': 'Set'
    'body': '\\\\Set{ $1 | $2 }$0'
  • フォルダ「snippets」内にファイル「fractions.cson」を作成し、以下を書き込む。
'.math.latex':
  '\\frac':
    'prefix': 'frac'
    'body': '\\\\frac{$1}{$2}$0'
  '\\tfrac':
    'prefix': 'tfrac'
    'body': '\\\\tfrac{$1}{$2}$0'
  '\\dfrac':
    'prefix': 'dfrac'
    'body': '\\\\dfrac{$1}{$2}$0'
  'd/dx':
    'prefix': 'diff'
    'body': '\\\\frac{d$2}{d${1:x}$2}$0'
  'partial d/dx':
    'prefix': 'pdiff'
    'body': '\\\\frac{\\\\partial$2}{\\\\partial ${1:x}$2}$0'
  • フォルダ「snippets」内にファイル「integrals.cson」を作成し、以下を書き込む。
'.math.latex':
  '\\int_{}^{}':
    'prefix': 'Int'
    'body': '\\\\int_{$2}^{$3} $4 \, d${1:x}$0'
  '\\int':
    'prefix': 'int'
    'body': '\\\\int $2 \, d${1:x}$0'
  '\\iint_{}':
    'prefix': 'Iint'
    'body': '\\\\iint_{$2} $3 \, d${1:x}$0'
  '\\iint':
    'prefix': 'iint'
    'body': '\\\\iint $2 \, d${1:x}$0'
  • 以上を終えた段階で、プロジェクトツリーは下のようになる。

  • ここで、一旦 Atom をすべて閉じ、Atom を再起動する。
  • TeX を開くときは、「alt-shift-p」を同時押下し、現れたパレットの TeX を選択。
  • 新たに latex 用の Snippets を追加したい場合、「ctrl-,」を同時押下して設定を開く。
  • 次に、下の順に「パッケージ」クリック→「my-snippets-latex」を検索→「my-snippets-latex」の名前の横らへんをクリック。

f:id:lightology:20180125235307p:plain

  • 下のような画面が開けるので、「View Code」をクリック。

f:id:lightology:20180125235718p:plain

  • 「my-snippets-latex」のプロジェクトツリーが現れるので、好きなように編集。

 
 

感想

Snippets はパッケージをダウンロードした方が良いから、そのうち修正するかも。
自作して、GitHub に上げるのも良いけど、やり方がよくわからない・・・。

Atom で言語ごとに文字コードを指定したい

新規で書き始める際に、自動で文字コードが変更されるようにしたかった。
例えば、C言語の新規ファイルを開いたら Shift JIS で、Python を開いたら UTF-8 というように。
それが解決できたのでメモ。
※パッケージ「auto-encoding」を入れてると、使えないかも・・・。

解決策

個人設定(config...)から、ファイル「config.cson」を開き、そこに以下を書き込む

".c.source":
  core:
    fileEncoding: "shiftjis"
".python.source":
  core:
    fileEncoding: "utf8"

Atom 上の LaTeX 数式環境で、補完候補が出ない

TeXテキストエディタとして Atom を採用した。
しかし、補完候補としての Snippets が、数式環境内でうまく機能しなかった。
いろいろ調べて、原因と一応の解決策が得られたのでメモ。

解決策

パッケージ「language-latex」をアンインストール
パッケージ「language-latexsimple」をインストール

原因

  • TeX の grammer を構成するパッケージとして「language-latex」を採用。
  • 「language-latex」の仕様:数式環境内のテキストは string 扱い
  • 「autocomplete-snippets」の仕様:comment / string では Snippets 候補が出ない

詳しくは以下のサイトを参照
github.com

Atom の LaTeX で、テキストと数式で文字色を変える

「File」→「Stylesheet...」の順にクリックして、ファイル「style.less」を開く。
そこに以下を入力。

atom-text-editor {
  .syntax--math {
    color: hsl(128, 80%, 40%);
  }
}

背景も色付けしたい場合は、代わりに以下を入力。

@background-color: rgb(40, 44, 52);

atom-text-editor {
  color: grey;
  background-color: @background-color;
  .syntax--math {
    color: hsl(128, 80%, 40%);
    background-color: hsl(125, 100%, 10%);
    .indent-guide.leading-whitespace {
      background-color: @background-color;
      &.hard-tab {
        background-color: @background-color;
      }
    }
  }
}

Atom 上の LaTeX 数式環境で、Snippets が出ない

AtomLaTeX をやろうとしたら、数式環境で Snippets がうまく機能しないことが判明。
いろいろ調べて、原因と一応の解決策が得られたのでメモ。
※ この記事は古いので、こちらを参照(2017/12/26)

解決策

「ctrl-,」で設定を開き、「Packages」のところで「language-latex」を検索してクリック。
「View Code」を押すと、新しい Atom のウィンドウで「language-latex」のフォルダが開かれる。
以下のサイトを参考に該当ファイルの該当箇所を修正。
github.com

原因

調べたところ、原因は恐らく次の2点であることが分かった。

  • パッケージ「language-latex」の仕様:
    • 数式環境内は string として認識される
  • パッケージ「autocomplete-snippets」の仕様:
    • comment や string の所にカーソルがあると、Snippets などの補完候補を出さない

これらは次のページに書かれている。github.com

まとめ

パッケージをダイレクトにいじっているので、アップデートの際や、他の人と Snippets を共有する際に問題が発生しそう。
テキストモードと数式モードの違いがわかりづらくなるのもあるし・・・。
と言っても、スタイルシートで文字に色づけすればいいだけだから、大した問題ではないけど。
とりあえず、もっと便利な方法が見つかったら更新する予定。
てか、本当はパッケージ作って対応したかったんだけど、難しくて挫折中・・・。

Atom の LaTeX 用 Snippets(個人用)

パッケージ「language-latex」の Snippets は、次のサイトから取得していると思われる。
github.com自分用として、これに細かい修正を加えたかったので、「File」→「Snippets」からファイル「snippets.cson」を開いて、そこに下記の内容を追加。

##################################
# My snippets for LaTeX          #
# Last modified time: 2017/10/06 #
##################################
'.text.tex.latex':
# preamble and package/class file
  '\\documentclass{article}...':
    'prefix': 'article'
    'body': '\\\\documentclass[a4paper, 12pt]{article}\n$2\n\\\\begin{document}\n\t\n\\\\end{document}'
  '\\documentclass{jsarticle}...':
    'prefix': 'jsarticle'
    'body': '\\\\documentclass[a4paper, 12pt]{jsarticle}\n$2\n\\\\begin{document}\n\t\n\\\\end{document}'
  '\\usepackage{}':
    'prefix': 'usepackage'
    'body': '\\\\usepackage{$1}'
# \begin{}...\end{}
  '\\begin{center}...\\end{center}':
    'prefix': 'center'
    'body': '\\\\begin{center}\n\t${2:% text}\n\\\\end{center}'
# Document level
  '\\chapter{}':
    'prefix': 'chapter'
    'body': '%---------------------------------------------------------------\n% Chapter ${1:1}\n%---------------------------------------------------------------\n\\\\chapter{${2:chapter name}}\n\\\\label{chap: ${2:chapter label}}\n\t$0'
  '\\section{}':
    'prefix': 'section'
    'body': '%-----------------------------------------------------------\n% Section ${1:1}\n%-----------------------------------------------------------\n\\\\section{${2:section name}}\n\\\\label{sec: ${2:section label}}\n\t$0'
  '\\subsection{}':
    'prefix': 'subsection'
    'body': '%-------------------------------------------------------\n% Subsection ${1:1.1}\n%-------------------------------------------------------\n\\\\subsection{${2:subsection name}}\n\\\\label{sub: ${2:subsection label}}\n\t$0'
  '\\subsubsection{}':
    'prefix': 'subsubsection'
    'body': '%---------------------------------------------------\n% Subsubsection ${1:1.1.1}\n%---------------------------------------------------\n\\\\subsubsection{${2:subsubsection name}}\n\\\\label{subs: ${2:subsubsection label}}\n\t$0'
# environment
  '\\begin{center}...\\end{center}':
    'prefix': 'center'
    'body': '\\\\begin{center}\n\t${2:% text}\n\\\\end{center}'
# amsmath
  '\\usepackage{amsmath}':
    'prefix': 'amsmath'
    'body': '\\\\usepackage{amsmath}'
  '\\begin{equation}...\\end{equation}':
    'prefix': 'Equation'
    'body': '\\\\begin{equation}\n\t${2:% equation}\n\\\\label{eq: ${1:ref_name}}\n\\\\end{equation}'
  '\\begin{equation*}...\\end{equation*}':
    'prefix': 'equation'
    'body': '\\\\begin{equation*}\n\t${1:% equation}\n\\\\end{equation*}'
  '\\begin{align}...\\end{align}':
    'prefix': 'Align'
    'body': '\\\\begin{align}\n\t${2:% equation}\n\\\\label{eq: ${1:ref_name}}\n\\\\end{align}'
  '\\begin{align*}...\\end{align*}':
    'prefix': 'align'
    'body': '\\\\begin{align*}\n\t${1:% equation}\n\\\\end{align*}'
# amsthm
  '\\usepackage{amsthm}':
    'prefix': 'amsthm'
    'body': '% Settings: Theorem environment\n\\\\usepackage{amsthm}\n\t\\\\newtheorem{definition}{Definition}[section]\n\t\\\\newtheorem{theorem}{Theorem}[section]\n\t\\\\newtheorem{lemma}[theorem]{Lemma}\n\t\\\\newtheorem{proposition}[theorem]{Proposition}\n\t\\\\newtheorem{corollary}[theorem]{Corollary}\n\t\\\\newtheorem{remark}{Remark}[section]'
  '\\theoremstyle{}':
    'prefix': 'theoremstyle'
    'body': '\\\\theoremstyle{${1:stylename}}\t% stylename = plain, definition, remark'
  '\\newtheoremstyle{}':
    'prefix': 'newtheoremstyle'
    'body': '''
      \\\\newtheoremstyle{${1:stylename}} % name of the style to be used
      \t{${2:spaceabove}}            % measure of space to leave above the theorem. E.g.: 3pt
      \t{${3:spacebelow}}            % measure of space to leave below the theorem. E.g.: 3pt
      \t{${4:bodyfont}}              % name of font to use in the body of the theorem
      \t{${5:indent}}                % measure of space to indent
      \t{${6:headfont}}              % name of head font
      \t{${7:headpunctuation}}       % punctuation between head and body
      \t{${8:headspace}}             % space after theorem head; " " = normal interword space
      \t{${9:headspec}}              % Manually specify head.
    '''
  '\\newtheorem{}{}':
    'prefix': 'newtheorem'
    'body': '\\\\newtheorem{${1:name}}{${2:Printed output}}'
  '\\newtheorem{}{}[numberby]':
    'prefix': 'newtheorem_num'
    'body': '\\\\newtheorem{${1:env_name}}{${2:output_name}}[${3:numberby}]'
  '\\newtheorem{}[counter]{}':
    'prefix': 'newtheorem_count'
    'body': '\\\\newtheorem{${1:env_name}}[${2:counter}]{${3:output_name}}'
  '\\begin{definition}...\\end{definition}':
    'prefix': 'definition'
    'body': '\\\\begin{definition}\n\t${2:% text}\n\\\\label{def: ${1:ref_name}}\n\\\\end{definition}'
  '\\begin{theorem}...\\end{theorem}':
    'prefix': 'theorem'
    'body': '\\\\begin{theorem}\n\t${2:% text}\n\\\\label{thm: ${1:ref_name}}\n\\\\end{theorem}'
  '\\begin{lemma}...\\end{lemma}':
    'prefix': 'lemma'
    'body': '\\\\begin{lemma}\n\t${2:% text}\n\\\\label{lem: ${1:ref_name}}\n\\\\end{lemma}'
  '\\begin{proposition}...\\end{proposition}':
    'prefix': 'proposition'
    'body': '\\\\begin{proposition}\n\t${2:% text}\n\\\\label{prop: ${1:ref_name}}\n\\\\end{proposition}'
  '\\begin{corollary}...\\end{corollary}':
    'prefix': 'corollary'
    'body': '\\\\begin{corollary}\n\t${2:% text}\n\\\\label{cor: ${1:ref_name}}\n\\\\end{corollary}'
  '\\begin{remark}...\\end{remark}':
    'prefix': 'remark'
    'body': '\\\\begin{remark}\n\t${2:% text}\n\\\\label{rem: ${1:ref_name}}\n\\\\end{remark}'
  '\\begin{problem}...\\end{problem}':
    'prefix': 'problem'
    'body': '\\\\begin{problem}\n\t${2:% text}\n\\\\label{prob: ${1:ref_name}}\n\\\\end{problem}'
  '\\begin{example}...\\end{example}':
    'prefix': 'example'
    'body': '\\\\begin{example}\n\t${2:% text}\n\\\\label{e.g.: ${1:ref_name}}\n\\\\end{example}'
  '\\begin{proof}...\\end{proof}':
    'prefix': 'proof'
    'body': '\\\\begin{proof}\n\t$1\n\\\\end{proof}'

# math environment
'.text.tex.latex .string.other.math':
# fractions
  '\\frac':
    'prefix': 'frac'
    'body': '\\\\frac{$1}{$2} $0'
  'd/dx':
    'prefix': 'differential operator'
    'body': '\\\\frac{d$2}{d${1:x}$2} $0'
  'd/dx: partial':
    'prefix': 'partially differential operator'
    'body': '\\\\frac{\\\\partial$2}{\\\\partial ${1:x}$2} $0'
# variable-sized symbols
  '\\sum':
    'prefix': 'sum'
    'body': '\\\\sum_{$1}^{$2} $0'
  '\\prod':
    'prefix': 'product'
    'body': '\\\\prod_{$1}^{$2} $0'
  '\\bigcap':
    'prefix': 'bigcap'
    'body': '\\\\bigcap_{$1}^{$2} $0'
  '\\bigcup':
    'prefix': 'bigcup'
    'body': '\\\\bigcup_{$1}^{$2} $0'
  '\\int':
    'prefix': 'int'
    'body': '\\\\int_{$1}^{$2} ${4:f(x)} \\\\, d${3:x} $0'
# log-like Symbols
  '\\det()':
    'prefix': 'det'
    'body': '\\\\det \\\\left ( $1 \\\\right ) $0'
  '\\exp()':
    'prefix': 'exp'
    'body': '\\\\exp \\\\left ( $1 \\\\right ) $0'
  '\\lim':
    'prefix': 'lim'
    'body': '\\\\lim_{$1} $0'
  '\\liminf_{}':
    'prefix': 'liminf'
    'body': '\\\\liminf_{$1} $0'
  '\\limsup_{}':
    'prefix': 'limsup'
    'body': '\\\\limsup_{$1} $0'
  '\\max':
    'prefix': 'max'
    'body': '\\\\max_{$1} $0'
  '\\min':
    'prefix': 'min'
    'body': '\\\\min_{$1} $0'
# brackets
  '\\left \\right':
    'prefix': 'LeftRight'
    'body': '\\\\left ${1:<} $3 \\\\right ${2:>} $0'
  '()':
    'prefix': 'brackets.soft'
    'body': '\\\\left ( $1 \\\\right ) $0'
  '{}':
    'prefix': 'brackets.curly'
    'body': '\\\\left \\\\{ $1 \\\\right \\\\} $0'
  '[]':
    'prefix': 'brackets.hard'
    'body': '\\\\left [ $1 \\\\right ] $0'
  '<>':
    'prefix': 'brackets'
    'body': '\\\\left < $1 \\\\right > $0'
  'angular <>':
    'prefix': 'brackets.angular'
    'body': '\\\\left \\\\langle $1 \\\\right \\\\rangle $0'
  '| |':
    'prefix': 'absolute value'
    'body': '\\\\left | $1 \\\\right | $0'
  '|| ||':
    'prefix': 'norm'
    'body': '\\\\left \\\\| $1 \\\\right \\\\| $0'
  '||...||_{}':
    'prefix': 'Norm'
    'body': '\\\\left \\\\| $2 \\\\right \\\\|_{$1} $0'
# other
  '\\begin{matrix}...\\end{matrix}':
    'prefix': 'matrix'
    'body': '\\\\begin{${1:p/b/v/V/B}matrix}\n\t$2\n\\\\end{${1:p/b/v/V/B}matrix}$0'
  '\\begin{matrix}...\\end{matrix}':
    'prefix': 'SmallMatrix'
    'body': '\\\\begin{smallmatrix} $1 \\\\end{smallmatrix} $0'