![Создание шаблона LaTeX из данных по другим путям](https://rvso.com/image/353048/%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5%20%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0%20LaTeX%20%D0%B8%D0%B7%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%BF%D0%BE%20%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D0%BC%20%D0%BF%D1%83%D1%82%D1%8F%D0%BC.png)
Я хочу создать шаблон, в котором я могу изменять один файл .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
сам оператор.