从其他路径中的数据创建 LaTeX 模板

从其他路径中的数据创建 LaTeX 模板

我想制作一个模板,我可以在其中修改一个 .tex 文件,并让其从网络中提取各种“样板”(即不会更改的信息)。首先,我会有一些 .tex 文件,用户可以将其复制/粘贴到新文件夹中,然后指定一些内容:

%% User Data
hello world!

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

然后,我将从模板文件夹中提取序言以及其余信息:

%% 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

如您所见,我需要调用序言,然后调用不在同一文件夹中的各种数据。有人知道调用这些信息的简单方法吗?或者更好的管理系统?

答案1

这听起来像是一个新的本地包或类,带有辅助文件。

首先,创建一个目录,例如mytemplate,如果您是唯一的用户,则在您的个人本地 texmf 树中,或者在站点范围的本地 texmf 树中,或者将最终模板作为 zip 存档分发,并附带说明人们如何在他们的 PC 上安装它(在他们个人或站点范围的 texmf 树中)。就我而言,在 Linux 下,我将创建目录mytemplate

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

或用于全站访问

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

无论您在这些文件夹中放入什么内容,都无需明确路径即可找到。请注意,站点范围的本地目录通常已编入索引,因此您必须在将文件添加到目录后重建索引。在 Linux 下,我texhash以 root(管理员)身份调用。

通用序言和文档设置成为样式文件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.clsmytemplate.sty可以提供一个命令\Introduction(可能带有一些参数),该命令执行一些特定操作,并逐字包含简介文本或使用语句\input本身。

相关内容