사용법을 단순화하기 위해 기존 클래스를 수정하려고 합니다. 기본적으로 나는 사용자가 .cls
파일과 일부 리소스(로고가 있는 png 파일, 일부 글꼴 및 파일에서 읽을 수 있는 일부 정보가 있는 텍스트 파일 .cls
)가 포함된 폴더를 복사하기를 원합니다.
.cls
내 문제는 파일이 파일을 찾 도록 할 수 없다는 것입니다 . 예를 들어 를 사용하고 있지만 \InputIfFileExists{./<nameoftextfile>}{}{\ClassError...}
작동하지 않습니다(항상 오류가 발생합니다).
파일 과 같은 폴더에 있는 파일을 참조하는 방법이 있나요 .cls
?
그런데 폴더에 클래스 파일을 "설치"하려면 texmf-local
리소스를 어떻게 참조해야 합니까(그런 다음 texmf-local의 일부 하위 폴더에 넣음)? 파일에 texmf 폴더 경로를 하드 코딩하는 것은 합리적이지 않은 것 같습니다 .cls
.
답변1
일반적으로 동일한 디렉터리에 있는 다른 파일을 참조하는 것은 완벽하게 작동합니다. 그러나 이미 다음과 같이 말하는 것으로 충분합니다 \InputIfFileExists{<nameoftextfile>}{}{\ClassError...}
. (그러나: <nameoftextfile>
충분하지 않습니다. 확장자가 있어야 합니다!) TeX에서도 한 레벨 위의 디렉토리를 참조하려면 를 사용합니다 ../<dir>
. 다음 설정을 통해 원하는 결과를 얻을 수 있습니다.
디렉토리 설정
texmf-local
|
+-- dir myclass
| |
| +-- file myclass.cls
| +-- file myexternalfile.tex
|
+-- dir resources
| |
| +-- file resource.tex
파일
main.tex
\RequirePackage{filecontents}
\begin{filecontents}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}[2017/01/22 Example LaTeX class]
\LoadClass{article}
\InputIfFileExists{myexternalfile.tex}{}{\ClassError{myclass}{file not found}{}}
\InputIfFileExists{../resources/resource.tex}{}{\ClassError{myclass}{file not found}{}}
\end{filecontents}
\documentclass{myclass}
\begin{document}
\mymacro{} \myothermacro
\end{document}
myexternalfile.tex
\def\mymacro{hello}
resource.tex
\def\myothermacro{world}
답변2
내가 이해한 바에 따르면, 당신은 많은 파일이 포함된 디렉토리를 가지고 있습니다. 하나는 .cls
파일이고 다른 하나는 파일이 읽을 내용입니다 .cls
.
사용자는 아마도 .tex
귀하의 클래스를 호출하는 문서를 가지고 있을 것입니다.
\documentclass{fabulousclass}
...
사용자가 클래스를 사용하는 가장 쉬운 방법은 문서를 .tex
다른 모든 항목과 함께 디렉토리에 넣는 것입니다.
당신의 수업은 다음과 같이 말할 수 있습니다.
\input{extensionfile}% extensionfile.tex
\input{configfile.cfg}% configfile.cfg
\includegraphics{logo}% logo.png
그러면 모든 것이 발견될 것입니다.
사용자가 자신의 디렉터리를 작업 디렉터리로 만들지 않도록 하려면 파일을 설치하도록 알려야 합니다.
세부 사항은 TeX 배포판에 따라 다릅니다. TeX Live에는 두 가지 주요 옵션이 있습니다.
TEXMFHOME
TEXMFLOCAL
첫 번째 옵션이 가장 간단합니다. 사용자는 개인 TEXMF 트리에 디렉토리를 만들기만 하면 됩니다. Unix-ish 시스템에서:
mkdir -p $(kpsewhich -var TEXMFHOME)/tex/latex
# where fabulousclassdirectoryname is the name of the directory containing your class and resources
mv -n fabulousclassdirectoryname $(kpsewhich -var TEXMFHOME)/tex/latex/
그러면 작업 디렉터리에 관계없이 파일이 검색됩니다.
TEXMFLOCAL
추가 단계를 수행하는 경우에도 절차는 동일합니다 . 이 프로세스에는 일반적으로 최소한 Unix-ish 시스템에 대한 권한이 필요합니다.
mkdir -p $(kpsewhich -var TEXMFLOCAL)/tex/latex
# where fabulousclassdirectoryname is the name of the directory containing your class and resources
mv -n fabulousclassdirectoryname $(kpsewhich -var TEXMFLOCAL)/tex/latex/
mktexlsr $(kpsewhich -var TEXMFLOCAL)
그게 다야.
원하는 경우 리소스를 TEXMFLOCAL
또는 의 다른 하위 디렉터리에 넣을 수 있습니다 . TEXMFHOME
하지만 왜 그렇게 하려는지 모르겠고 사람들을 혼란스럽게 할 뿐입니다.