"비설치" 클래스에 리소스 포함

"비설치" 클래스에 리소스 포함

사용법을 단순화하기 위해 기존 클래스를 수정하려고 합니다. 기본적으로 나는 사용자가 .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에는 두 가지 주요 옵션이 있습니다.

  1. TEXMFHOME
  2. 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하지만 왜 그렇게 하려는지 모르겠고 사람들을 혼란스럽게 할 뿐입니다.

관련 정보