
저는 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.tex
cls는 자체 위치에서 그래픽을 직접 가져옵니다. 작동하려면 templates
디렉토리를 자체 texmf 루트로 초기화해야 합니다(저는 를 사용하여 그렇게 했습니다 Miktex console --> Settings --> Directories --> Add
). 이 설정의 장점은 템플릿이 있는 디렉터리에 대한 상대 또는 절대 경로를 제공할 필요 없이 내 PC의 모든 곳에서 템플릿을 사용할 수 있다는 것입니다. 이는 GIT 버전 제어 측면에서 많은 도움이 됩니다.
이 접근 방식에 대한 추가 답변과 이동 가능한 설치에 대한 세부 정보는 여기에 있습니다.
내 모든 .tex 파일에서 사용할 수 있도록 내 .sty 또는 .cls 파일을 어디에 배치합니까?
.sty 및 .cls 파일뿐만 아니라 .pdf 또는 .eps 형식의 일부 로고도 번들로 묶는 LaTeX 패키지를 작성하는 방법은 무엇입니까?
특히이것기본 경로에 대한 답변입니다.