Создание шаблона LaTeX из данных по другим путям

Создание шаблона LaTeX из данных по другим путям

Я хочу создать шаблон, в котором я могу изменять один файл .tex и заставлять его вытягивать из сети различные ''шаблоны'' (т. е. информацию, которая не меняется). Во-первых, у меня будет какой-то .tex, который пользователь будет копировать/вставлять в новую папку, а затем указывать некоторые вещи:

%% User Data
hello world!

%% Initialize document
\input{boilerplate/Preamble} %<----This folder would be located like C://User/etc,...

Затем я бы извлек преамбулу из папки Template, а также остальную информацию:

%% Select class
\documentclass[10pt]{article}

%% Packages
\usepackage{cmap}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{setspace}
\usepackage{siunitx}
\usepackage{lastpage}
\usepackage{newtxmath}
\usepackage{newtxtext}
\usepackage{textcomp}
\usepackage{longtable}
\usepackage{footnote}
\usepackage{multirow}
\usepackage{amssymb,amsmath,mathtools}
\usepackage{graphicx}
\usepackage[final]{pdfpages}
\usepackage{csvsimple}
\usepackage{grffile}
\usepackage{booktabs}
\usepackage[justification=centering]{caption}
\usepackage{longtable}
\usepackage{xcolor}
\usepackage{enumitem}
\setenumerate[1]{label=\thesection.\arabic*.}
\setenumerate[2]{label*=\arabic*.}
\usepackage[hyphens]{url}
\usepackage{breakurl} 
\usepackage[bookmarksnumbered]{hyperref}
\hypersetup{%
colorlinks=true,% hyperlinks will be coloured
citecolor=blue, % hyperlink text will be blue  
linkcolor=blue,% hyperlink text will be blue
linkbordercolor=blue,% hyperlink border will be blue
filecolor=blue,
urlcolor=blue,
breaklinks = true,
hypertexnames=true,
}
\usepackage[nameinlink]{cleveref}

%% Begin Document
\begin{document}
\input{boilerplate/Introduction} % Need path
\input{boilerplate/DetailedEquipmentInformationandRequirements} % Need path
\input{boilerplate/ProductInformation} % Need path
\input{boilerplate/SupplierScopeofWork} % Need path
\appendix
\include{boilerplate/Appendices} % Need path
\end{document}

Я предполагаю, что структура папок будет следующей:

Template
-Boilerplate
--Introduction.tex
--DetailedEquipmentInformationandRequirements.tex
Project 1
-Compiler 1 .tex file
-Image Folder
Project 2
-Compiler 2 .tex file
-Image Folder

Как вы видите, мне нужно было бы вызвать Preamble, а затем вызвать различные данные, которые не находятся в той же папке. Кто-нибудь знает простой способ вызвать эту информацию или, возможно, лучшую систему управления?

решение1

Это похоже на новый локальный пакет или класс со вспомогательными файлами.

Сначала создайте каталог, скажем mytemplate, либо в вашем личном локальном дереве texmf, если вы будете единственным пользователем, либо в локальном дереве texmf всего сайта, или распространите окончательный шаблон в виде zip-архива с инструкциями о том, как люди должны установить его на своих ПК (в своем личном или в дереве texmf всего сайта). В моем случае, под Linux, я бы создал каталог mytemplateлибо как

$(kpsewhich -var TEXMFHOME)/texmf/tex/latex/mytemplate

или для доступа ко всему сайту как

$(kpsewhich -var TEXMFLOCAL)/tex/latex/mytemplate

Все, что вы поместите в эти папки, будет найдено без необходимости указания явного пути. Обратите внимание, что локальный каталог сайта обычно индексируется, поэтому вам придется перестроить индекс после добавления файлов в каталог. В Linux я вызываю texhashкак root (admin).

Общая преамбула и настройки документа становятся файлом стилей mytemplate.styили, если вам необходим контроль над загруженным классом документа,файл классаmytemplate.cls. Затем вы начинаете конкретные документы с \documentclass{mytemplate}(относится к mytemplate.cls) или с \documentclass{anyclass}\usepackage{mytemplate}(относится к mytemplate.sty).

Конкретные пользовательские данные могут быть собраны с помощью команд, которые сохраняют их для последующего использования или в качестве параметров для команд, которые немедленно их обрабатывают. Для первого подхода используйте команду LaTeX \authorв качестве модели:

\newcommand\@data{} % if it is ok that no data is provided
% or alternatively
\newcommand\@data{\@latex@warning@no@line{No \noexpand\data given}} % gives a warning if the data is needed but has not provided
\newcommand\data[1]{\renewcommand\@data{#1}} % Store the argument under the name `\@data`

Если документ содержит \data{42}, то позже вы сможете получить доступ к значению в файле стиля или класса как \@data.

Во втором подходе документ вызывает макрос \processdata{42}, и данные немедленно обрабатываются.

Что касается фрагментов текста, вы можете предоставить их как прямой код TeX для включения. Тогда документ будет иметь строку

\input{myintroduction}

Если myintroduction.texнаходится в texmf-tree, он будет найден без указания полного пути. В качестве альтернативы ваш mytemplate.clsили mytemplate.styможет предоставить команду \Introduction(возможно, с некоторыми параметрами), которая выполняет некоторые конкретные действия и либо содержит вводный текст дословно, либо использует \inputсам оператор.

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