包括“非安裝”類別中的資源

包括“非安裝”類別中的資源

我正在嘗試修改現有的類別以簡化其用法。基本上我只是希望用戶複製一個包含.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但我不明白你為什麼要這樣做,這只會讓人感到困惑。

相關內容