Включение ресурсов в класс «неустановленных»

Включение ресурсов в класс «неустановленных»

Я пытаюсь изменить существующий класс, чтобы упростить его использование. По сути, я бы просто хотел, чтобы пользователь скопировал папку, содержащую файл .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:

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если хотите. Но я не понимаю, зачем вам это нужно, и это только запутает людей.

Связанный контент