![Erstellen einer LaTeX-Vorlage aus Daten in anderen Pfaden](https://rvso.com/image/353048/Erstellen%20einer%20LaTeX-Vorlage%20aus%20Daten%20in%20anderen%20Pfaden.png)
Ich möchte eine Vorlage erstellen, in der ich eine .tex-Datei ändern und verschiedene „Standardtexte“ (also Informationen, die sich nicht ändern) aus einem Netzwerk abrufen kann. Zunächst hätte ich eine .tex-Datei, die der Benutzer in einen neuen Ordner kopieren/einfügen und dann einige Dinge angeben kann:
%% User Data
hello world!
%% Initialize document
\input{boilerplate/Preamble} %<----This folder would be located like C://User/etc,...
Dann würde ich die Präambel sowie die restlichen Informationen aus dem Vorlagenordner ziehen:
%% 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}
Die Ordnerstruktur, die ich mir vorstelle, wäre:
Template
-Boilerplate
--Introduction.tex
--DetailedEquipmentInformationandRequirements.tex
Project 1
-Compiler 1 .tex file
-Image Folder
Project 2
-Compiler 2 .tex file
-Image Folder
Wie man sieht, müsste ich die Präambel aufrufen und dann verschiedene Daten abrufen, die sich nicht im selben Ordner befinden. Kennt jemand eine einfache Möglichkeit, diese Informationen abzurufen oder vielleicht ein besseres Verwaltungssystem?
Antwort1
Das klingt nach einem neuen lokalen Paket oder einer neuen Klasse mit Zusatzdateien.
Erstellen Sie zunächst ein Verzeichnis, sagen wir mytemplate
, entweder in Ihrem persönlichen lokalen Texmf-Baum, wenn Sie der einzige Benutzer sind, oder im lokalen Texmf-Baum der gesamten Site, oder verteilen Sie die endgültige Vorlage als Zip-Archiv mit Anweisungen, wie die Benutzer sie auf ihrem PC installieren müssen (in ihrem persönlichen oder im Texmf-Baum der gesamten Site). In meinem Fall unter Linux würde ich das mytemplate
Verzeichnis entweder als erstellen
$(kpsewhich -var TEXMFHOME)/texmf/tex/latex/mytemplate
oder für den Site-weiten Zugriff als
$(kpsewhich -var TEXMFLOCAL)/tex/latex/mytemplate
Alles, was Sie in diese Ordner legen, wird dann gefunden, ohne dass ein expliziter Pfad erforderlich ist. Beachten Sie, dass das Site-weite lokale Verzeichnis normalerweise indiziert ist, sodass Sie den Index nach dem Hinzufügen von Dateien zum Verzeichnis neu erstellen müssen. Unter Linux rufe ich es texhash
als Root (Administrator) auf.
Die gemeinsamen Präambel- und Dokumenteinstellungen werden in eine Stildatei umgewandelt mytemplate.sty
oder, wenn Sie Kontrolle über die geladene Dokumentklasse benötigen,eine Klassendateimytemplate.cls
Die konkreten Dokumente beginnen Sie dann mit \documentclass{mytemplate}
(bezieht sich auf mytemplate.cls
) oder mit \documentclass{anyclass}\usepackage{mytemplate}
(bezieht sich auf mytemplate.sty
).
Bestimmte Benutzerdaten können mithilfe von Befehlen gesammelt werden, die sie für die spätere Verwendung speichern, oder als Parameter für Befehle, die sie sofort verarbeiten. Für den ersten Ansatz verwenden Sie den LaTeX- \author
Befehl als Modell:
\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`
Wenn das Dokument enthält \data{42}
, können Sie später in Ihrer Stil- oder Klassendatei als auf den Wert zugreifen \@data
.
Beim zweiten Ansatz ruft das Dokument ein Makro auf \processdata{42}
und die Daten werden sofort verarbeitet.
Die Textfragmente können Sie als direkten TeX-Code bereitstellen, der dann eingefügt werden soll. Das Dokument enthält dann eine Zeile
\input{myintroduction}
Wenn myintroduction.tex
es sich im texmf-Baum befindet, wird es gefunden, ohne dass der vollständige Pfad angegeben werden muss. Alternativ können Sie mytemplate.cls
einen mytemplate.sty
Befehl (ggf. mit einigen Parametern) angeben \Introduction
, der bestimmte Dinge tut und entweder den Intro-Text wörtlich enthält oder \input
selbst eine Anweisung verwendet.