Latex

지난 Potenit manual 작성을 위해 사용한 Latex 문법을 공유하고자 리뷰를 작성합니다. 신정민 연구원님 깨서 이미 설명한 바(http://server.rcv.sejong.ac.kr:8080/2020/08/31/latex/)가 있기 때문에, 연구원님이 설명하지 않으신 문법들을 소개하겠습니다. 신정님 연구원님과 마찬가지로, Overleaf라는 플렛폼에서 작성하였습니다.

Font 바꾸기

글의 폰트만 바꾸어 주어도 글은 상당히 보기 좋아집니다.

실제로 작성하였던 메뉴얼의 일부인데요, 위는 기본 폰트이고, 아래는 naver에서 제공하는 나눔바른고딕 폰트를 적용한 글 입니다.
물론 느끼는 바는 주관적이지만, 한눈에 보기에 더 세련되게 느껴다고 생각합니다.

\usepackage{fontspec}
%한글 폰트 설정
\setmainhangulfont[Path = font/,
BoldFont = *Bold,
ItalicFont = *Light
]{NanumBarunGothic}
%영어 폰트 설정
\setmainfont[Path = font/,
BoldFont = *Bold,
ItalicFont = *Light
]{NanumBarunGothic}

적용 방법은 간단합니다. fontspec 패키지를 선언해주고, 위와 같은 코드를 작성해주면 되는데요, Path는 font파일 (ttf)이 저장된 경로, BoldFont는 bold font의 파일 이름, ItalicFont는 italic font의 파일 이름을 적어주고, 마지막 중괄호에 ttf파일의 이름을 적어주면 됩니다.

위 이미지는 overleaf상의 폴더구조입니다. latex가 주 작업공간이니, font폴더안의 NanumBarunGothic ttf파일을 사용한다는 의미입니다. *Bold, *Light에서의 *은 리눅스나 윈도우의 터미널 명령어에서 사용해 보셨을 것과 마찬가지로, Bold Light로 끝나는 파일, 그 중에서도 NanumBarunGothic로 시작하는 파일을 의미합니다. 따라서 NanumBarunGothic.ttf 파일이 기본폰트로, NanumBarunGothicBold.ttf 파일이 Bold 폰트로, NanumBarunGothicLight.ttf파일이 Italic 폰트로 적용됩니다. 제공해주는 파일에 따로 Italic 폰트가 없었어서, 기울임체는 문서에서 사용하지 못했습니다.

목차

목차가 없는 매뉴얼은 본적이 없으실겁니다. 매뉴얼에 있어서 목차는 필수라고생각합니다. 매뉴얼의 구조를 파악하고 있지않는한, 목차없이 매뉴얼에서 원하는 부분을 찾는것은 상당히 힘들것입니다.
우선 목차를 만드는 방법을 설명드리기 앞서, Latex는 한번에 한 파일에 작성하지 않는다는 것을 알아두셔야 합니다. 물론 모든 내용을 한 문서에 작성하여도 무관하겠지만, 그것은 마치 코드를 함수화, 모듈화 없이 main문 하나에 작성하는 정도의 가독성을 보일 것입니다.

위 이미지는 작성한 potenit 매뉴얼의 파일 구조인데요, 여러개의 tex파일로 구성된 것을 확인하실 수 있습니다. 각각의 tex파일에는 독립적인 내용들이 들어있습니다. sf_af_network.tex파일에는 SF / AF net에 대한 설명이, camera_grabber.tex에는 윈도우의 camer grabber 에 대한 설명이 들어있습니다. 이렇게 독립적으로 작성한 tex파일들을 메인 tex에서 (우리는 manual.tex를 메인으로 사용했습니다.) include 해준 후, \tableofcontents 함수만 작성해주면 됩니다.

그러면 아래와 같은 목차가 작성됩니다.

여백

위에서 보이시는 adjustwidth와 doublespacing은 여백과 관련된 함수입니다.
신정민 연구원님이 설명해 주셨던 \usepackage{geometry} 이용한 방법으로 문서 전체의 줄간격과 들여쓰기를 조절할 수 있습니다. 하지만, 문서를 작성하다보면 지정해놓은 줄간격과 들여쓰기는 어색한 부분이 생길 수 있는데요, 이를 위해 특정 부분은 위의 \begin{adjustwidth} 와 \begin{doublespacing} 함수를 통해 조절 할 수 있습니다.

\begin{adjustwidht}{좌}{우}
%내용
\end{adjustwidht}

좌와 우에 넣는 값에 따라 좌 우의 여백이 바뀝니다.

\begin{doublespacing} 
%내용
\end{doublespacing}

위 함수를 사용하기 위해서는 \usepackage{setspace} 가 필요합니다. 줄간격을 정해주는 옵션으로, setspace package를 선언해주면 사용이 가능합니다. doublespacing말고도 singlespacing onehalfspacing 옵션을 통해 조절이 가능합니다.

\hypersetup함수는 하이퍼링크의 색을 바꿔주는 함수입니다.
\usepackage{hyperref}를 선언해주면 사용할 수 있고,

\hypersetup{
    colorlinks=true,
    linkcolor=blue,
    filecolor=magenta,      
    urlcolor=cyan,
}

링크의 종류에 따라 다른 색을 적용해 줄 수 있습니다.

확실히 보기 좋아보입니다.

링크

그럼 링크를 넣는 법에 대하여 설명해드리겠습니다. 목차에서의 링크는 \tabelofcontents로 목차를 만들면 자동으로 만들어집니다. 이 외로 직접 링크를 넣는 방법은 크게 2가지가 있습니다.

문서 외 하이퍼링크
\href{링크}{보여질 글자}
예)
\href{https://docs.nvidia.com/jetson/archives/jetpack-archived/jetpack-43/release-notes/index.html}{JetPack 4.3 Release note}

href를 통해 링크를 걸면 설정해둔 색깔로 바뀌게 됩니다.

문서 내 링크

1. 그림
그림은 삽입하는 방법은 신정민 연구원님의 설명에 작성되어있습니다. 거기서 label옵션을 통해 나중에 참조할 수 있다고 하였는데요,
\ref{fig : label이름}
그림을 생성할 때 label옵션에 적어둔 옵션으로 링크할 수 있습니다.

이는 서로 다른 tex파일에서도 참조가 가능합니다.

2. 글
그림 뿐만 아니라 어느 섹션의 어느 부분을 참고하라는 내용이 필요 할때가 있습니다. 실제로 우리의 매뉴얼에서도 사용되었는데요, 이러한 방식으로 중복된 설명을 줄일 수 있기에 유용합니다.

참조 방법은 그림과 똑같이 \ref 함수를 사용합니다. 미리 글에 labeling을 해두고 참조를 합니다.

\setword{보여질 글}{Word : 라벨 이름}
위 그림과 같이 setword를 통해 특정 글에 label을 걸어두고 참조를 합니다. 마찬가지로 서로 다른 tex 파일로의 참조가 가능합니다.

new page

문서를 작성하다 보면 아래 사진처럼

다음 페이지로 넘어가 글이 어색하게 잘릴 때가 있습니다. \newpage 함수를 통해 가독성을 높힐 수 있습니다.

코드
매뉴얼에 함수가 들어가기도 합니다. 논문을 쓸 때 역시 함수를 적을 일이 있을 것입니다.

\begin{lstlisting}[style=코드종류]
%내용
\end{lstlisting} 으로 코드를 넣을 수 있습니다.
이때 메인tex에서 lstlisting 함수 전체에 옵션을 넣어 줄 수 있습니다.
아래 옵션들은 실제로 위 코드블럭을 표현하는데 사용된 옵션입니다.

\usepackage{listings}
\lstset{frame=tb,
  aboveskip=3mm,
  belowskip=3mm,
  showstringspaces=false,
  columns=flexible,
  basicstyle=\normalsize{\ttfamily},
  identifierstyle={\ttfamily},
  stringstyle=\color{mauve}{\ttfamily},
  commentstyle=\small\color{dkgreen}{\ttfamily},
  keywordstyle=\normalsize\color{dkblue}{\ttfamily},
  texcl = true,
  %numbers=left,
  %numberstyle=\tiny\color{gray},
  %numbersep=10pt,
  breaklines=true,
  breakatwhitespace=true,
  tabsize=3,
  %xleftmargin=5pt,
  backgroundcolor=\color{whitegray}
}

읽어보시면 직관적으로 어떤 옵션인지 알 수 있기에 texcl 옵션을 제외하고 자세한 설명은 생략하겠습니다.
\begin{lstlisting} 블럭 안의 내용은 latex 문법을 벗어나 일반 txt파일의 글처럼 작성됩니다. 예를들어 블럭안에 \href, \bf등을 입력해도 글자 그대로를 보여주고 아무기능을 하지 않게 됩니다.
texcl은 코드상의 주석부분을 latex문법으로 처리하게 하는 옵션입니다. 이를 넣은 이유는 한글 주석은 latex에서 제대로 처리하지 못하기 때문입니다.
texcl을 포함한 다른 옵션들은 모두 코드블럭의 가독성을 높혀주고 문서 전체의 질을 향상시켜 줍니다. 옵션을 뺀 아래 이미지와 비교해보면 큰 차이가 납니다.

특히 한글 주석 부분이 영어와 함께 쓰일 때 글이 깨지는것을 보실 수 있습니다.

이상으로 latex 사용법의 추가적인 설명을 마치겠습니다. 감사합니다.

Author: rcvlab

RCV연구실 홈페이지 관리자 입니다.

3 thoughts on “Latex

  1. 좋은 글 감사합니다.

    해당 내용 중에 ‘\setword’ 명령어는 Latex에서 제공하는 명령어가 아닌, \newcommand 로 만든 커스텀 명령어입니다.

    \newcommand{\setword}[2]{%
    \phantomsection
    #1\def\@currentlabel{\unexpanded{#1}}\label{#2}%
    }

    위와 같이 설정해주어야 \setword 명령어를 사용할 수 있습니다.

  2. 저번에 신정민 연구원님이 발표했던 내용에 의하면 Latex를 사용하는 이유는 높은 자유도를 가지기 때문이다. 라고 표현을 하셨는데, 이진수 연구원님은 Latex를 사용하는 이유가 무엇 때문이라고 생각을 하시나요? word나 hwp 같은 GUI가 잘 갖추어져있는 상용소프트웨어와 비교했을때 critical한 장점이 무엇일까요?

    1. 문서의 독립성이라고 생각합니다. 제가 잘 모르는 것일 수도 있지만, 제가 아는 한에서는 hwp 나 word 같은 경우, 한 문서내에 모든 글이 다 들어있습니다. 반면 latex는 각 파트별로 독립적인 문서에서 작성한 것을 한곳에 합쳐서 볼 수 있습니다. 이러한 점이 문서 작성에 있어 또, 읽는데 있어 편리하게 해주고 가독성을 높혀준다고 느꼈습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다