既存のクラスを変更して、その使用を簡素化しようとしています。基本的には、.cls
ファイルといくつかのリソース (ロゴを含む png ファイル、いくつかのフォント、およびファイルによって読み取られる情報を含むテキスト ファイル.cls
) を含むフォルダーをユーザーにコピーしてもらいたいだけです。
私の問題は、.cls
ファイルにファイルを見つけさせることができないことです。たとえば、 を使用しています\InputIfFileExists{./<nameoftextfile>}{}{\ClassError...}
が、機能しません (常にエラーが発生します)。
ファイルと同じフォルダ内のファイルを参照する方法はありますか.cls
?
ところで、クラス ファイルをフォルダーに「インストール」する場合texmf-local
、リソース (その後、texmf-local のいくつかのサブフォルダーに配置する) をどのように参照すればよいでしょうか。ファイル内の texmf フォルダーへのパスをハード コーディングするのは合理的ではないようです.cls
。
答え1
通常、同じディレクトリ内の別のファイルを参照することは、あなたが行ったように完全に機能するはずです。ただし、 と言えば十分です\InputIfFileExists{<nameoftextfile>}{}{\ClassError...}
。(ただし、<nameoftextfile>
それだけでは十分ではありません。拡張子がなければなりません!) TeX でも 1 つ上のレベルのディレクトリを参照するには、 を使用します../<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
私の理解では、多数のファイルを含むディレクトリがあります。 1 つはファイルであり.cls
、その他はファイルによって読み取られるものです.cls
。
ユーザーは、おそらく.tex
あなたのクラスを呼び出すドキュメントを持っているでしょう
\documentclass{fabulousclass}
...
ユーザーがクラスを使用する最も簡単な方法は、.tex
ドキュメントを他のすべてのものと同じディレクトリに配置することです。
クラスのみんなはこう言うでしょう。
\input{extensionfile}% extensionfile.tex
\input{configfile.cfg}% configfile.cfg
\includegraphics{logo}% logo.png
そうすればすべてが見つかります。
ユーザーがディレクトリを作業ディレクトリにする必要がないようにするには、ファイルをインストールするようにユーザーに指示する必要があります。
詳細は TeX ディストリビューションによって異なります。TeX Live の場合、主に 2 つのオプションがあります。
TEXMFHOME
TEXMFLOCAL
最初のオプションは最も簡単です。ユーザーは自分の TEXMF ツリーにディレクトリを作成するだけです。Unix 系のシステムの場合:
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
。しかし、なぜそうする必要があるのかわかりませんし、人々を混乱させるだけです。