我想制作一个模板,我可以在其中修改一个 .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.cls
或mytemplate.sty
可以提供一个命令\Introduction
(可能带有一些参数),该命令执行一些特定操作,并逐字包含简介文本或使用语句\input
本身。