包括“未安装”类中的资源

包括“未安装”类中的资源

我正在尝试修改现有类以简化其使用。基本上,我只是希望用户复制一个包含文件.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 系统上的权限。

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。但我不明白您为什么要这样做,这只会让人感到困惑。

相关内容