주제 2

Snippet

자주 쓰는 수식·정리·그림의 LaTeX 코드와 VS Code snippet 정의를 함께 보여줍니다.

LaTeX과 JSON 비교

  • LaTeX 코드: snippet이 확장되면 .tex 파일에 들어가는 내용입니다.
  • snippet 정의: latex.json에 저장하는 JSON 항목입니다.

JSON 문자열에서는 역슬래시를 한 번 더 써서 표현합니다. 아래 LaTeX 명령은 .tex에서 역슬래시 하나로 시작하지만, latex.json의 snippet 본문에서는 두 개로 시작합니다.

\begin{equation*}
"\\begin{equation*}"

$1, $2, $3은 Tab 키로 차례로 이동하는 입력 위치입니다. $0은 마지막 커서 위치를 지정하고, ${1:label}은 첫 번째 입력 위치에 기본 텍스트 label을 넣습니다.

latex.json에 정의를 여러 개 넣을 때는 바깥쪽 { ... } 안에 각 항목을 배치하고 항목 사이를 쉼표로 구분합니다.

수식 구분자·행렬·적분 snippet은 수식 모드 안에서 사용합니다. equation*, align, cases snippet은 표시 수식 환경 전체를 삽입합니다.

아래 예제의 bmatrix, equation*, align, cases, \text에는 amsmath가 필요합니다. \mathbb{R}을 쓰려면 amsfonts 또는 amssymb를 불러옵니다.

수식 구분자

자주 쓰는 수식 구분자에는 다음 LaTeX 패턴을 씁니다.

\left\| x \right\|
\left\vert x \right\vert
\left\langle x \right\rangle

다음 JSON 항목들을 latex.json에 추가합니다.

"norm": {
  "prefix": "@11",
  "body": "\\left\\| $1 \\right\\| $0"
},
"absolute value": {
  "prefix": "@1",
  "body": "\\left\\vert $1 \\right\\vert $0"
},
"angle brackets": {
  "prefix": "@<",
  "body": "\\left\\langle $1 \\right\\rangle $0"
}

수식

2×2 행렬에는 다음 LaTeX 패턴을 사용합니다.

\begin{bmatrix}
    a & b \\
    c & d
\end{bmatrix}

다음 JSON 항목을 latex.json에 추가합니다.

"2x2 Matrix": {
  "prefix": "mtx2",
  "body": [
    "\\begin{bmatrix}",
    "    ${1:a} & ${2:b} \\\\",
    "    ${3:c} & ${4:d}",
    "\\end{bmatrix}$0"
  ]
}

정적분에는 다음 LaTeX 패턴을 사용합니다.

\int_{a}^{b}  f(x)  \, dx

다음 JSON 항목을 latex.json에 추가합니다.

"Integration": {
  "prefix": "int",
  "body": "\\int_{${1:a}}^{${2:b}}  ${3:f(x)}  \\, d${4:x} $0"
}

표시 수식

번호 없는 단일 표시 수식에는 다음 패턴을 사용합니다.

\begin{equation*}
    ...
\end{equation*}

다음 JSON 항목을 latex.json에 추가합니다.

"Equation without numbering": {
  "prefix": "eq",
  "body": [
    "\\begin{equation*}",
    "    $0",
    "\\end{equation*}",
    ""
  ]
}

eq를 입력하고 제안 목록에서 해당 snippet을 선택하면 equation* 환경이 삽입되고 커서는 수식 안에 놓입니다.

문서의 다른 곳에서 참조할 수식에는 번호가 붙는 equation과 \label{...}을 사용합니다.

\begin{equation}    \label{eq:main-estimate}
    ...
\end{equation}

다음 JSON 항목을 latex.json에 추가합니다.

"Equation with numbering": {
  "prefix": "eqn",
  "body": [
    "\\begin{equation}    \\label{eq:${1:main-estimate}}",
    "    $0",
    "\\end{equation}",
    ""
  ]
}

eqn snippet을 선택하면 첫 입력 위치에서 eq: 뒤의 label을 고칩니다. Tab으로 이동하면 수식 본문 안의 마지막 커서 위치에 도달합니다.

정렬 수식

번호가 필요 없는 여러 줄 계산에는 다음 LaTeX 패턴을 씁니다.

\begin{align*}
    f(x)
    &= g(x) \\
    &= h(x)
\end{align*}

다음 JSON 항목을 latex.json에 추가합니다.

"Align without numbering": {
  "prefix": "ag",
  "body": [
    "\\begin{align*}",
    "    $1",
    "    &${2:=} $3   \\\\",
    "    &${4:=} $5",
    "\\end{align*}",
    "",
    "$0"
  ]
}

latex.json의 본문 문자열에 적은 역슬래시 네 개는 .tex에 역슬래시 두 개로 들어갑니다. align은 이 명령으로 행을 바꿉니다.

중요한 줄마다 label이 필요할 때는 다음 LaTeX 패턴을 씁니다.

\begin{align}
    ...
    &= ...    \label{ag:first-step}    \\
    &= ...    \label{ag:second-step}
\end{align}

다음 JSON 항목을 latex.json에 추가합니다.

"Align with numbering": {
  "prefix": "agn",
  "body": [
    "\\begin{align}",
    "    $1",
    "    &${2:=} $3    \\label{ag:${4:first-step}}    \\\\",
    "    &${5:=} $6    \\label{ag:${7:second-step}}",
    "\\end{align}",
    "",
    "$0"
  ]
}

줄별 번호가 필요 없으면 align*를 사용합니다. 특정 줄을 참조해야 하면 align을 사용하고 그 줄에 \label{...}을 붙입니다.

정리 블록과 증명

프리앰블에 \newtheorem{theorem}{Theorem}을 선언한 문서에서는 다음 패턴을 사용합니다.

\begin{theorem}    \label{thm:main-result}
    ...
\end{theorem}

다음 JSON 항목을 latex.json에 추가합니다.

"Theorem": {
  "prefix": "thm",
  "body": [
    "\\begin{theorem}    \\label{thm:${1:main-result}}",
    "    $0",
    "\\end{theorem}",
    ""
  ]
}

프리앰블에 definition, proposition, lemma, corollary 환경이 정의되어 있다면 같은 형식으로 snippet을 만들 수 있습니다. 환경 이름, snippet 이름과 prefix, label 접두어를 함께 바꿉니다.

amsthm이 제공하는 proof 환경에는 다음 패턴을 사용합니다.

\begin{proof}
    ...
\end{proof}

다음 JSON 항목을 latex.json에 추가합니다.

"Proof": {
  "prefix": "pf",
  "body": [
    "\\begin{proof}",
    "    $0",
    "\\end{proof}"
  ]
}

LaTeX 원문에서 참조 대상을 알아보기 쉽도록 label에 thm:, lem:, prop:, def:, crl: 같은 접두어를 사용합니다.

cases와 조각별 정의

두 가지 경우로 나뉘는 정의에는 다음 LaTeX 패턴을 씁니다.

\begin{equation*}
    f(x) =
    \begin{cases}
        ...    &    \text{if } ...,    \\
        ...    &    \text{if } ...
    \end{cases}
\end{equation*}

다음 JSON 항목을 latex.json에 추가합니다.

"Two cases": {
  "prefix": "css2",
  "body": [
    "\\begin{equation*}",
    "    ${1:f(x)} =",
    "    \\begin{cases}",
    "        $2    &    \\text{${3:if} } $4,    \\\\",
    "        $5    &    \\text{${6:if} } $7",
    "    \\end{cases}",
    "\\end{equation*}",
    "$0"
  ]
}

조건이 길면 수식 앞 문장에서 설명하고, cases 안에는 경우를 구분하는 데 필요한 내용만 남깁니다.

그림

프리앰블에서 graphicx를 불러온 문서에는 다음 그림 패턴을 사용합니다.

\begin{figure}[htbp]
    \centering
    \includegraphics[width=0.8\linewidth]{figure-filename}
    \caption{Caption text}
    \label{fig:main-figure}
\end{figure}

다음 JSON 항목을 latex.json에 추가합니다.

"Inserting a picture": {
  "prefix": "pct",
  "body": [
    "\\begin{figure}[htbp]",
    "    \\centering",
    "    \\includegraphics[width=${1:0.8}\\linewidth]{${2:figure-filename}}",
    "    \\caption{${3:Caption text}}",
    "    \\label{fig:${4:main-figure}}",
    "\\end{figure}",
    "",
    "$0"
  ]
}

첫 번째 입력값은 \linewidth에 곱할 너비 비율이고, 두 번째는 그림 파일 경로입니다. 세 번째와 네 번째에는 각각 캡션과 fig: 뒤의 label을 넣습니다.

텍스트와 수식 기호

첫 번째 패턴은 본문 텍스트에, 나머지 두 패턴은 수식 모드에 사용합니다.

Fr\'echet
\mathbb{R}
\qquad\text{and}\qquad

다음 JSON 항목들을 latex.json에 추가합니다.

"Frechet": {
  "prefix": "Fre",
  "body": "Fr\\'echet$0"
},
"Real numbers": {
  "prefix": "R",
  "body": "\\mathbb{R}$0"
},
"And in line": {
  "prefix": "qqand",
  "body": [
    "",
    "\\qquad\\text{${1:and}}\\qquad",
    "$0"
  ]
}

짧은 snippet은 다른 입력과 구분되는 prefix를 고릅니다. 한 글자짜리 R이 제안 목록에 자주 나타난다면 @R처럼 구분 기호를 붙일 수 있습니다.

이해한 LaTeX 패턴을 snippet으로 저장하고, 확장된 코드도 직접 읽고 수정할 수 있는지 확인하세요.

이미지 미리보기