논문 마크다운-LaTeX-PDF 변환

este·2025년 6월 7일

졸업논문

목록 보기
1/1

본 글에서는 논문을 다루기 때문에 흰 사진이 자주 나옵니다.

마지막 학기인 8학기에 들어서며 3학년까지 충분히 채워놓지 않은 학점 때문에 고생을 좀 했다. 각설하고 논문을 작성하기 위한 세팅을 먼저 본 글에 작성해보겠다. 필자는 막바지에 허겁지겁 이를 세팅하다보니 정신 없었다.

형식

기본적인 형식은 마크다운(.md)으로 작성한 파일을 TeX(LaTeX)로 변환하고 이를 다시 pdf로 변환하도록 했다. 정작 제출은 한글 파일로 해야 해서 마지막에 일일이 옮기는 고생을 사서 했다(학기 중반에 조교님이 템플릿 없다고 했는데 실제로는 있었고 이 사실을 학기말에 알아버렸다... 템플릿은 2022년도 학술자료 템플릿 공모전 최우수작이었나 그랬던 것 같다). 기본적으로 학술대회에서 주로 사용하는 템플릿들을 참고해서 제목, 초록은 1열로, 논문 본문은 2열로 작성하는 것이 보기 좋은 것 같아 multicol 패키지를 사용해 만들었고, 아웃풋은 다음과 같이 나온다.

citation들은 각주, 바닥글로 처리하려고 했는데 바닥글이 이렇게 나와버리긴 했다. 템플릿에서는 중복되는 논문들은, 사진의 6~9번 바닥글을 예시로 들자면 Schulzrinne, H., et al., 앞의 논문, 1998. 형식으로 작성했기 때문에 크게 신경 쓰지는 않았다. 깃헙에 올라간 논문 중 이런 부분들은 수정할 생각이다.

제목 depth는 총 4단계로 작성했는데, 이 부분도 수정이 필요해보인다. 일반적으로는 3단계 까지만 사용된다고 하니 본문 내용을 손봐야 할 것 같다. 4단계 제목은 가., 나., ... 형식으로 작성되도록 했다.

코드 블럭은 마크다운을 통해 ```go 형식으로 작성한 블럭을 listings 패키지로 변환하도록 했다. 스타일을 어느 정도 커스텀하고 싶었지만 시간이 모자라 구현에 급급했다.

마크다운 파일에는 제목, 저자, 소속, 초록을 다음과 같이 작성해야 했다. 이후 본문 1장부터 #을 사용해 제목을, 제목으로부터 한 줄 띄고 본문을 작성하면 잘 작동했다. 본문도 단락 간 한 줄씩 띄우지 않으면 같은 단으로 인식되었다. 각 장의 제목에는 넘버링을 하지 않아야 한다(자동으로 넘버링이 된다).

---
title: '논문제목논문제목 논문제목 논문제목논문제목논문제목'
author:
  - 홍길동 (어떤대학교 무슨학과)
date: '2099년 12월 31일'
abstract: '국문초록국문초록국문초록 국문초록 국문초록국문초록 국문초록국문초록국문초록 국문초록 국문초록국문초록국문초록국문초록국문초록 국문초록국문초록국문초록국문초록국문초록 국문초록 국문초록국문초록국문초록국문초록 국문초록국문초록국문초록 국문초록 국문초록국문초록 국문초록국문초록국문초록국문초록국문초록'
lang: ko-KR
papersize: a4
---
<!-- 이 줄을 띄어야 한다 -->
# 서론
<!-- 이 줄을 띄어야 한다 -->
...생략
<!-- 이 줄을 띄어야 한다 -->
#  이론적 배경 및 관련 연구

마크다운으로 논문을 작성한다던지 ppt를 만들던지 할 때 위 형식(---)을 자주 사용하는 것 같다.

템플릿 파일 작성

LaTeX 사용법에 대한 지식은 전무하기 때문에 LLM을 열심히 갈궈 작성했다. 우선 필수 패키지들을 추가한다.

\documentclass{article}

\usepackage[a4paper, top=3cm, bottom=3cm, left=2cm, right=2cm, columnsep=0.8cm]{geometry}
\usepackage{kotex}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{url}
\usepackage{fancyhdr}
\usepackage{multicol}
\usepackage{framed}
% 코드 블럭 패키지 listings, 코드 블럭 색상에 사용할 xcolor
\usepackage{xcolor}
\usepackage{listings}
\usepackage{titlesec}

제목 형식은 아래와 같이 작성했다.

% 제목
\setcounter{secnumdepth}{4}
\titleformat{\section}{\normalfont\Large\bfseries}{\thesection.}{0.5em}{}
\titleformat{\subsection}{\normalfont\large\bfseries}{\thesubsection.}{0.5em}{}
\titleformat{\subsubsection}{\normalfont\normalsize\bfseries}{\thesubsubsection.}{0.5em}{}
\newcommand{\hangulnum}[1]{\ifcase#1\or 가\or 나\or 다\or 라\or 마\or 바\or 사\or 아\or 자\or 차\or 카\or 타\or 파\or 하\fi}
\renewcommand{\theparagraph}{\hangulnum{\value{paragraph}}.}
\titleformat{\paragraph}{\normalfont\normalsize\bfseries}{\theparagraph}{0.5em}{}
\titlespacing*{\paragraph}{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}

폰트 설정은 아래와 같이 했다.

% 폰트
\setmainfont{Times New Roman}
\setsansfont{Arial}
\setmainhangulfont{NanumMyeongjo}
\setsanshangulfont{NanumGothic}
\setmonofont{NanumGothicCoding}

코드 블럭에 적용할 스타일은 아래와 같이 작성했다. 이 부분을 더 깔끔하게 만들고 싶었지만 아쉽다.

% --- listings 스타일
\definecolor{codegray}{gray}{0.95}
\definecolor{keywordcolor}{rgb}{0.13, 0.13, 1}
\definecolor{stringcolor}{rgb}{0.7, 0.1, 0.1}
\definecolor{commentcolor}{rgb}{0, 0.5, 0}

\definecolor{shadecolor}{gray}{0.95}

전역 설정은 아래와 같이 했다. 코드 블럭 내부 spacing이 잘 안 돼서 추가한 설정이 몇 개 있다.

% 전역 설정
\lstset{
  language=Go,
  basicstyle=\small\ttfamily,
  keywordstyle=\color{keywordcolor}\bfseries,
  stringstyle=\color{stringcolor},
  commentstyle=\color{commentcolor},
  numbers=left,
  numberstyle=\tiny\color{gray},
  breaklines=true,
  captionpos=b,
  frame=none,
  showstringspaces=false,
  extendedchars=true,
  % 코드 블럭 공백 유지
  keepspaces=true,
  literate={
    {가}{{\fontspec{NanumGothicCoding}가}}1
    {나}{{\fontspec{NanumGothicCoding}나}}1
  }
}
% 코드 블럭 - 일반 텍스트
\lstdefinelanguage{text}{}

\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}

제목, 저자, 소속, 초록 스타일이다. 어떤 학술대회에 제출하는 지에 따라 크게 달라질 영역이 아닐까.

% 제목, 저자, 소속 스타일
\makeatletter
\def\@maketitle{%
  \newpage\null\vskip 2em%
  \begin{center}%
  \let \footnote \thanks
    {\Large\bfseries $title$ \par}%
    \vskip 1.5em%
    {\normalsize\lineskip .5em%
      \begin{tabular}[t]{c}%
        $for(author)$$author$$sep$ \\ $endfor$
      \end{tabular}\par}%
    \vskip 1em%
    {\normalsize $date$ \par}%
  \end{center}%
  \par\vskip 1.5em}
\makeatother

% 초록
\renewenvironment{abstract}
 {\centerline{\bfseries\abstractname}
  \begin{quote}\small}
 {\end{quote}}

각주 스타일은 이렇게 정의했다.

% footer
\pagestyle{fancy}
\fancyhf{}
\fancyfoot[R]{\thepage}
\renewcommand{\headrulewidth}{0pt}

본문 스타일은 아래와 같이 정의했다. 제목-저자-소속, 초록을 상단에 묶고 아랫줄부터 두 단으로 본문을 나눴다.

% 여기부터 문서
\begin{document}

\maketitle
\begin{abstract}
$abstract$
\end{abstract}
\vspace{1em}

\begin{multicols}{2}
$body$
\end{multicols}

\end{document}

사용한 명령어

전반적인 변환 과정을 수행하기 위해 pandoc을 사용했다. pdf 엔진으로는 xelatex를 사용했다. 국문 논문을 작성하기 때문에 kotex를 사용했고, 이를 위해 texlive-full 패키지를 설치했다(용량이 어마무시하게 커서 가능하다면 필수 패키지만 받는 것이 더 좋아보인다). 이전 챕터에서 작성한 내용을 template.tex에 저장하고 다음과 같은 명령어를 사용했다.
pandoc "thesis-main.md" -o 출력파일명.pdf --pdf-engine=xelatex --template=template.tex

마치며

확장자 제한이 없다면 논문 템플릿에 템플릿을 완벽하게 맞춰서 마크다운으로 작성하는 것이 참 좋을 것 같다. 확장자 제한이 한글(.hwp)이라면 어쩔 수 없이 윈도우 데스크탑을 켜는 수 밖에 없는 걸까...
논문(특히 졸업논문)을 작성해야 하는 누군가에게 도움이 되었으면 하는 마음에, 그리고 다음에 또 논문을 작성할 일이 있다면 처음부터 하지 않기 위해 본 글을 작성했다. 도움이 되었으면 좋겠다.

profile
este / 에스테입니다.

0개의 댓글