상대 경로, 포함, 입력, 클래스 간의 차이점을 사용하여 자체 LaTeX 템플릿 작성

상대 경로, 포함, 입력, 클래스 간의 차이점을 사용하여 자체 LaTeX 템플릿 작성

저는 Miktex를 사용하여 Windows 환경에서 작업하고 있습니다. 내 문서는 대부분 XeLaTeX로 작성되었지만 내 문제는 컴파일러에만 국한된 것이 아닌 것 같습니다.

모든 패키지 포함, 헤더 설정 및 그래픽 경로(예: 헤더 로고 포함)가 포함된 템플릿을 만들고 싶습니다. 템플릿을 사용하는 모든 문서에서 문서별 설정과 문서 내용만 갖고 싶습니다. 내 문제는 문서가 템플릿과 다른 폴더에 있을 수 있지만 여전히 템플릿 폴더의 사진을 포함하고 싶다는 것입니다. 내 설정은 다음과 같습니다.

.
├── templates/
│   ├── my_template.tex
│   └── pictures/
│       └── header_logo.pdf
└── documents/
    ├── my_document.tex
    └── pictures/
        └── some_picture.png

최소한의 예는 다음과 같습니다.

my_template.tex:

\documentclass[
    11pt,
    a4paper,
]{scrarticle}

\usepackage{scrextend}
\usepackage{scrlayer-scrpage}

%%%%% Graphics %%%%%
\usepackage{graphicx}
\graphicspath{{./pictures/}}

%%%% Title Setup %%%%%
\ihead{\includegraphics[width=6cm]{header_logo.pdf}}
\cfoot{}
\setlength{\headheight}{14pt}

my_document.tex:

\input{../templates/my_template.tex}

\graphicspath{{./pictures/}}

\begin{document}
\includegraphics[width=6cm]{some_picture.png}
\end{document}

내 질문은 이제 이 작업을 수행하는 표준 방법이 무엇인지입니다. 나는 찾았다이 질문매우 도움이 되지만 어느 것이 적절한지 파악하려면 다양한 접근 방식에 대해 좀 더 자세히 설명해야 합니다. 이 맥락에서 include와 사이의 차이점을 완전히 이해하지 못하거나 input대신 템플릿을 클래스로 바꿔야 하는지 이해하지 못합니다.

답변1

에서와 같이https://tex.stackexchange.com/a/250/162943, \input파일 내용을 다시 입력하고 includes추가하므로 clearpages중첩될 수 없습니다. 나는 \input.
이 명령은 \graphicspath폴더 목록을 인수로 수신하므로 \graphcispath{{folder1}{folder2}}템플릿 이미지 폴더(템플릿/그림)의 전체 경로와 문서 이미지 폴더(문서/그림)의 상대 경로를 사용할 것을 제안합니다. 같은 이름.

my_template.tex:

\documentclass[
    11pt,
    a4paper,
]{scrarticle}

\usepackage{scrextend}
\usepackage{scrlayer-scrpage}

%%%%% Graphics %%%%%
\usepackage{graphicx}
\graphicspath{{C:/Path/to/template/image/folder}{./pictures/}}

%%%% Title Setup %%%%%
\ihead{\includegraphics[width=6cm]{header_logo.pdf}}
\cfoot{}
\setlength{\headheight}{14pt}

my_document.tex:

\input{../templates/my_template.tex}

\begin{document}
\includegraphics[width=6cm]{some_picture.png}
\end{document}

또 다른 해결책은 심볼릭 링크를 사용하는 것입니다. 프로젝트 이미지 폴더 안에 템플릿 이미지 폴더의 심볼릭 링크를 만들고 \graphicspath{{./pictures/}}. 이 경우 각 includegraphics.

답변2

절대 경로를 피하려면 패키지를 사용할 수 있습니다 subfiles(주 사용 사례가 약간 다르지만). 필요한 변경 사항은 다음과 같습니다.

  • 를 추가하여 템플릿을 완전한 문서로 만듭니다 \begin{document}\end{document}.

  • 템플릿의 프리앰블 끝에서 패키지를 로드하고 subfiles나중에 그래픽 경로를 설정합니다. 단, 상대 경로를 사용하여 템플릿과 관련된 그림 디렉터리만 참조하도록 합니다.

  • 라인으로 실제 문서를 시작하세요

    \documentclass[rel.path to template]{subfiles}
    
  • 실제 문서의 서문에서 그래픽 경로에 로컬 그림 디렉터리를 추가합니다.

다른 솔루션에 비해 장점은 템플릿이 템플릿과 관련된 그림 디렉토리에 대해서만 알아야 하며 문서는 동일할 필요가 없는 디렉토리에 특정 이미지를 보관할 수 있다는 것입니다. 또한 절대 경로가 필요하지 않습니다.

예를 들어 이러한 변경 사항은 다음과 같습니다.

% templates/my_template.tex
\documentclass[
    11pt,
    a4paper,
]{scrarticle}

\usepackage{scrextend}
\usepackage{scrlayer-scrpage}

%%%%% Graphics %%%%%
\usepackage{graphicx}
\usepackage{subfiles}
\graphicspath{{./pictures/}}% <<< PICTURES LOCAL TO template DIRECTORY

%%%% Title Setup %%%%%
\ihead{\includegraphics[width=6cm]{header_logo.pdf}}
\cfoot{}
\setlength{\headheight}{14pt}
\begin{document}% <<< NECESSARY FOR subfiles TO WORK
\end{document}% <<< NECESSARY FOR subfiles TO WORK

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% documents/my_document.tex
\documentclass[../templates/my_template]{subfiles}% <<< LOAD PREAMBLE FROM ../templates/my_template.tex

\makeatletter% <<< EXTEND THE GRAPHICS SEARCH PATH BY LOCAL DIRECTORIES
\edef\Ginput@path{\Ginput@path{./pictures/}}% <<<<<<<<<<<<<<<<<
\makeatother% <<<<<<<<<<<<<<<<<

\begin{document}
\includegraphics[width=6cm]{some_picture.png}
\end{document}

답변3

다른 답변 중 하나에서 언급했듯이 \input마치 수동으로 결합한 것처럼 다른 파일의 텍스트를 직접 복사하십시오. 이는 일반적으로 수행하기 가장 쉬운 작업이며 큰 문서의 경우 중첩될 수 있습니다. \include콘텐츠를 넣을 새 페이지를 항상 생성하며 중첩될 수 없습니다.

사용의 이점 \include은 문서 시작 시 \includeonly파일 이름 목록과 함께 사용할 수 있으며 다른 파일 이름을 지정하는 모든 포함이 무시된다는 것입니다. 나는 메인 섹션이 사용되는 매우 큰 프로젝트에서 이것을 사용하여 \include그 중 하나에서 작업할 때 다른 섹션이 컴파일될 때까지 기다릴 필요가 없었습니다. 그런 다음 \input중첩할 수 없기 때문에 하위 섹션에 사용했습니다 \include. 섹션을 입력하고 하위 섹션을 포함하여 다른 방법으로 수행할 수도 있습니다.

프리앰블을 다른 파일에 넣는 것은 매우 일반적입니다. 다른 방법보다 다소 정확한 이 작업을 수행하는 몇 가지 방법이 있습니다. 이를 수행하는 가장 일반적인 방법은 프리앰블( 이외의 \documentclass)을 별도의 파일에 넣는 것입니다. 이 파일 mypreamble.sty은 무엇이든 호출할 수 있습니다. 예를 들어 로 끝나야 한다는 점에 유의한 .sty다음 \usepackage{mypreamble}다른 패키지를 좋아할 수 있습니다. 또한 \ProvidesPackage{mypreabmle}프리앰블 파일의 맨 위에 해당 줄을 추가해야 합니다 . 을 사용하여 수행할 수도 있지만 일부 내부 처리를 수행하고 선택적 매개변수 등을 허용하므로 \include권장되지 않습니다 .\usepackage

여러 파일에 유용한 다른 패키지 중 하나가 호출되어 import다음과 같은 명령을 사용할 수 있습니다 \import{path\to\secton}{sectionname.tex}. 이것에 대한 좋은 점은 이미 가져온 파일 내에서 무언가를 가져오려는 경우 \subimport{relitive/path/}{plot1.tex}가져온 파일에 대한 상대 경로를 사용하는 호출을 할 수 있다는 것입니다. 이는 매우 유용합니다.

답변4

Gernot와 Bryce의 답변을 듣고 실제로 내 서문을 파일에 넣으려고 했습니다 .cls. 이제 파일 트리가 다음과 같이 보이도록 일부 파일을 다시 정렬해야 했습니다.

.
├── templates/
│   └── tex/
│       └── latex/
│           └── my_template/
│               ├── my_template.cls
│               └── header_logo.pdf
└── documents/
    ├── my_document.tex
    └── pictures/
        └── some_picture.png

my_template.cls는 이제 다음과 같습니다.

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{my_template}
\LoadClass[
    11pt,
    a4paper,
]{scrarticle}

\RequirePackage{scrextend}
\RequirePackage{scrlayer-scrpage}

%%%%% Graphics %%%%%
\RequirePackage{graphicx}
\graphicspath{{./pictures/}}

%%%% Title Setup %%%%%
\ihead{\includegraphics[width=6cm]{header_logo.pdf}}
\cfoot{}
\setlength{\headheight}{14pt}

my_document.tex는 다음과 같습니다.

\documentclass{my_template}

\begin{document}
\includegraphics[width=6cm]{some_picture.png}
\end{document}

내부의 그래픽 경로는 my_template.cls이제 파일을 기준으로 하며 my_document.texcls는 자체 위치에서 그래픽을 직접 가져옵니다. 작동하려면 templates디렉토리를 자체 texmf 루트로 초기화해야 합니다(저는 를 사용하여 그렇게 했습니다 Miktex console --> Settings --> Directories --> Add). 이 설정의 장점은 템플릿이 있는 디렉터리에 대한 상대 또는 절대 경로를 제공할 필요 없이 내 PC의 모든 곳에서 템플릿을 사용할 수 있다는 것입니다. 이는 GIT 버전 제어 측면에서 많은 도움이 됩니다.

이 접근 방식에 대한 추가 답변과 이동 가능한 설치에 대한 세부 정보는 여기에 있습니다.

내 모든 .tex 파일에서 사용할 수 있도록 내 .sty 또는 .cls 파일을 어디에 배치합니까?

.sty 및 .cls 파일뿐만 아니라 .pdf 또는 .eps 형식의 일부 로고도 번들로 묶는 LaTeX 패키지를 작성하는 방법은 무엇입니까?

특히이것기본 경로에 대한 답변입니다.

관련 정보