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