논문

[정보] Overleaf에서 LaTeX 작성시 Cross-reference하기

성민석 2024. 3. 14. 13:43

예전부터 관련된 글을 아무리 찾아봐도 Overleaf에서 LaTeX을 작성할 때 Cross-reference하는 방법이 명확하게 나오지 않아 답답하다가 이번에 방법을 알게 되어 정리합니다. Overleaf를 사용하시는 많은 분들이 도움이 되셨으면 합니다.

 

이전에는 아래와 같이 시도를 했습니다. 결론적으로 이 방법들은 Overleaf에서는 통하지 않는 방법이라고 생각하시면 됩니다. 해당 방법들은 Overleaf가 아닌 환경에서는 동작하는 방법들입니다. 하지만 여기에서는 Overleaf 환경이라고 가정한 뒤, 논문의 main.tex 파일에 있는 \label{sec:introduction}을 suppls.tex에서 참조한다고 가정하고 구체적인 예시와 함께 설명하겠습니다.

 

[TL;DR] latexmkrc 파일 만드시고 main.tex를 가져오고자 하는 파일(suppls.tex)에서 아래 명령어를 실행하시면 됩니다. latexmkrc 코드는 방법3에 있습니다.

\usepackage{xr}
\externaldocument{main}

 

방법1 - xr 패키지 사용하기

<main.tex 파일 설정하기>
main.tex 파일에는 특별한 설정이 필요 없습니다. 여기서는 단지 sec:introduction이라는 레이블이 정의되어 있다고 가정합니다.

% main.tex
\documentclass{article}

\begin{document}

\section{Introduction}
\label{sec:introduction}

% 본문...

\end{document}

 

<suppls.tex 파일 설정하기>
suppls.tex 파일의 preamble에 xr 패키지를 추가하고, main.tex 문서를 외부 문서로 지정합니다. 이때, main.tex 파일의 이름이나 경로를 \externaldocument 명령어에 정확히 맞춰야 합니다. Overleaf에서는 파일이 같은 디렉토리에 위치한다면 파일명만 명시하면 됩니다.

 

% suppls.tex
\documentclass{article}
\usepackage{xr}
\externaldocument{main} % 'main'은 main.tex의 컴파일된 .aux 파일명을 가리킵니다.

\begin{document}

\section{Supplementary Material}

여기는 보충 자료입니다. 메인 텍스트의 \ref{sec:introduction}절을 참고하세요.

\end{document}

 

 

방법2 - subfiles 패키지 사용하기

이 방법을 사용하면, suppls.tex 파일을 main.tex의 서브파일로 만들 수 있습니다. 이 경우, suppls.tex에서 main.tex의 모든 설정을 상속받을 수 있으므로, 별도의 preamble 설정 없이 main.tex의 \label들을 직접 참조할 수 있습니다.

 

<main.tex 파일 설정하기>
main.tex 파일에 subfiles 패키지를 추가하고, suppls.tex 파일을 \subfile{} 명령어를 사용하여 포함시킵니다.

 

% main.tex
\documentclass{article}
\usepackage{subfiles}

\begin{document}

\section{Introduction}
\label{sec:introduction}

% 본문...

\subfile{suppls.tex}

\end{document}

 

<suppls.tex 파일 설정하기>
suppls.tex 파일의 preamble에 documentclass 대신 \documentclass[main.tex]{subfiles}를 사용하여 main.tex을 참조합니다.

 

% suppls.tex
\documentclass[main.tex]{subfiles}

\begin{document}

\section{Supplementary Material}

여기는 보충 자료입니다. 메인 텍스트의 \ref{sec:introduction}절을 참고하세요.

\end{document}

 

 

방법3 - Overleaf에서 공식적으로 소개한 방법

해당 방법은 Overleaf에서 xr 패키지를 사용하여 여러 LaTeX 파일 간의 크로스 레퍼런싱을 설정하는 방법입니다. 방법1과 유사하지만 Overleaf에서 main.tex과 suppls.tex 같은 여러 파일 간에 크로스 레퍼런스를 설정하려면, latexmkrc 파일을 사용하여 컴파일 과정을 자동화하는 것이 핵심입니다. 이 방법은 xr 패키지를 활용하여 다른 파일(main.tex)에서 정의된 레이블을 suppls.tex 파일에서 참조할 수 있게 해줍니다.

 

<suppls.tex 설정하기>
xr 패키지를 불러오고, 필요한 경우 hyperref 패키지보다 먼저 xr-hyper를 불러옵니다.
\externaldocument 명령을 사용하여 참조하려는 외부 문서(main.tex)를 지정합니다. 이 때, 레이블 충돌을 방지하기 위해 선택적으로 접두사를 추가할 수 있습니다. xr 또는 xr-hyper 패키지를 사용할 때, 외부 문서에서 사용한 레이블을 정확히 참조하기 위해서는 \externaldocument 명령에 올바른 파일명(확장자 제외)을 지정해야 합니다.

 

\usepackage{xr}
\externaldocument{main}

 

<latexmkrc 파일 설정하기>
Overleaf 프로젝트에 latexmkrc 파일을 추가합니다. 이 파일은 Perl 스크립트로, latexmk의 동작을 사용자 정의하는 데 사용됩니다. latexmkrc 파일에는 main.tex 같은 외부 문서가 수정되었을 때 자동으로 재컴파일하도록 설정하는 코드가 포함됩니다. latexmkrc 파일은 컴파일 과정을 자동화하고, 필요한 경우 외부 문서를 자동으로 재컴파일합니다. 이를 통해 크로스 레퍼런스가 항상 최신 상태로 유지됩니다. 

 

# latexmkrc
# 이 코드는 외부 문서에 대한 참조를 자동으로 처리하기 위해 필요합니다.
$sub_doc_output = 'output-subdoc';

@sub_doc_options = ();
push @sub_doc_options, '-pdf'; # 또는 필요에 따라 다른 컴파일 옵션을 사용하세요.

push @file_not_found, '^No file\\s*(.+)\s*$';

add_cus_dep( 'tex', 'aux', 0, 'makeexternaldocument' );
sub makeexternaldocument {
    if ( $root_filename ne $_[0] )  {
        my ($base_name, $path) = fileparse( $_[0] );
        pushd $path;
        my $return = system "latexmk",
                            @sub_doc_options,
                            "-aux-directory=$sub_doc_output",
                            "-output-directory=$sub_doc_output",
                            $base_name;
        if ( ($sub_doc_output ne ' ') && ($sub_doc_output ne '.') ) {
             rdb_add_generated( "$sub_doc_output/$base_name.aux" );
             copy "$sub_doc_output/$base_name.aux", ".";
        }
        popd;
        return $return;
   }
}

 

위 코드를 main.tex가 있는 같은 위치/레벨에 넣어두시고 나서 main.tex를 한번 컴파일 다시 한 뒤, suppls.tex를 컴파일하시면 됩니다. 이렇게 하면 Overleaf에서 ?? 나오던 \ref들이 모두 정상적으로 나오는 걸 확인할 수 있습니다. 아래는 제가 Supplementary material을 작성하면서 main.tex에 있던 Section label을 가져오지 못했다가 (좌) 정상적으로 가져온 이후 제대로 ref되는 모습(Section 4.1 이라고 나옴)을 첨부해뒀습니다.

 

Overleaf 문서를 직접 확인하시면 보다 구체적인 방법과 설명이 나와있습니다. 

https://www.overleaf.com/learn/how-to/Cross_referencing_with_the_xr_package_in_Overleaf

 

Cross referencing with the xr package in Overleaf - Overleaf, Online LaTeX Editor

An online LaTeX editor that’s easy to use. No installation, real-time collaboration, version control, hundreds of LaTeX templates, and more.

www.overleaf.com

 

 

728x90
반응형

'논문' 카테고리의 다른 글

[논문] 연구 주제를 깊이 있게 이해하는 10가지 요소  (0) 2024.03.18