215 lines
8.5 KiB
TeX
215 lines
8.5 KiB
TeX
\ProvidesPackage{System/team_template}[2026/04/06 V1.0 Custom Team Template]
|
|
|
|
% ==========================================
|
|
% 1. Core Packages (Changed \usepackage to \RequirePackage)
|
|
% ==========================================
|
|
\RequirePackage{amsmath}
|
|
\RequirePackage{amssymb}
|
|
\RequirePackage[top=3cm, bottom=3cm, left=3cm, right=3cm]{geometry}
|
|
\RequirePackage{setspace}
|
|
\RequirePackage{parskip}
|
|
\RequirePackage{enumitem}
|
|
\RequirePackage{array}
|
|
\RequirePackage{longtable}
|
|
\RequirePackage[table]{xcolor}
|
|
\RequirePackage{graphicx}
|
|
\graphicspath{{Assets/Image/}}
|
|
\RequirePackage{tikz}
|
|
\RequirePackage[figure,table]{totalcount}
|
|
\usetikzlibrary{shadings, shapes.geometric}
|
|
\RequirePackage{fontawesome5}
|
|
\RequirePackage[many]{tcolorbox}
|
|
\RequirePackage[hidelinks]{hyperref}
|
|
\RequirePackage{csquotes}
|
|
\RequirePackage[backend=biber, style=numeric, defernumbers=true]{biblatex}
|
|
\RequirePackage{fancyhdr}
|
|
\RequirePackage{listings}
|
|
|
|
% ==========================================
|
|
% 2. Engine Variables & Flags (Initializers)
|
|
% ==========================================
|
|
\newif\ifModernShapes
|
|
\newif\ifSeparateCover
|
|
\newif\ifDefaultAuthor
|
|
\newif\ifMultiAuthor
|
|
|
|
% --- Status and Confidentiality Definitions ---
|
|
\newcommand{\ConfPublic}{\textcolor{green!70!black}{عمومی}}
|
|
\newcommand{\ConfInternal}{\textcolor{primary}{داخلی سازمان}}
|
|
\newcommand{\ConfSecret}{\textcolor{accentYellow}{محرمانه}}
|
|
\newcommand{\ConfTopSecret}{\textcolor{accentRed}{\textbf{بسیار محرمانه}}}
|
|
|
|
\newcommand{\StatusDraft}{\textcolor{gray}{پیشنویس}}
|
|
\newcommand{\StatusReview}{\textcolor{orange}{در حال بررسی}}
|
|
\newcommand{\StatusApproved}{\textcolor{green!70!black}{مصوب و اجرایی}}
|
|
\newcommand{\StatusArchived}{\textcolor{red}{آرشیو شده}}
|
|
|
|
% ==========================================
|
|
% 3. Typography & Language
|
|
% ==========================================
|
|
\RequirePackage{xepersian}
|
|
\settextfont[Path=Assets/Font/, Extension=.ttf, BoldFont=Vazirmatn-Bold]{Vazirmatn-Regular}
|
|
\setlength{\headheight}{47pt}
|
|
\setlength{\footskip}{36pt}
|
|
|
|
% ==========================================
|
|
% 4. Brand Colors & Formatting
|
|
% ==========================================
|
|
\definecolor{primary}{RGB}{12, 45, 92}
|
|
\definecolor{accentRed}{RGB}{190, 40, 50}
|
|
\definecolor{accentYellow}{RGB}{242, 169, 0}
|
|
\definecolor{accentTeal}{RGB}{0, 155, 165}
|
|
\definecolor{accentDark}{RGB}{20, 30, 45}
|
|
|
|
\colorlet{tablehead}{primary!15}
|
|
\colorlet{tablephase}{accentDark!8}
|
|
|
|
\setstretch{1.4}
|
|
\setlist[itemize]{itemsep=0.4em, topsep=0.2em}
|
|
|
|
% ==========================================
|
|
% 5. Custom UI Boxes & Code Snippets
|
|
% ==========================================
|
|
\lstset{
|
|
basicstyle=\ttfamily\small,
|
|
keywordstyle=\color{primary}\bfseries,
|
|
commentstyle=\color{gray}\itshape,
|
|
stringstyle=\color{accentRed},
|
|
numbers=left,
|
|
numberstyle=\tiny\color{gray},
|
|
stepnumber=1,
|
|
numbersep=8pt,
|
|
backgroundcolor=\color{accentDark!5},
|
|
showspaces=false,
|
|
showstringspaces=false,
|
|
frame=single,
|
|
rulecolor=\color{primary!40},
|
|
tabsize=4,
|
|
captionpos=b,
|
|
breaklines=true,
|
|
breakatwhitespace=false
|
|
}
|
|
|
|
\newtcolorbox{ScoreBox}{
|
|
enhanced, colback=white, colframe=primary, boxrule=1.2pt,
|
|
arc=3mm, auto outer arc, left=10pt, right=10pt, top=8pt, bottom=8pt,
|
|
drop fuzzy shadow=black!10
|
|
}
|
|
|
|
\newtcolorbox{QuoteBox}{
|
|
enhanced, frame hidden, colback=accentYellow!10,
|
|
borderline east={4pt}{0pt}{accentYellow},
|
|
sharp corners=east, rounded corners=west, arc=3mm,
|
|
right=25pt, left=10pt, top=10pt, bottom=10pt,
|
|
overlay={
|
|
\node[anchor=north east, text=accentYellow!30, font=\Huge] at ([xshift=-8pt, yshift=-8pt]frame.north east) {\faQuoteRight};
|
|
}
|
|
}
|
|
|
|
% ==========================================
|
|
% 6. Page Geometry, Shapes, and Headers
|
|
% ==========================================
|
|
\newcommand{\OddPageShapesA}{%
|
|
\begin{tikzpicture}[remember picture, overlay]
|
|
\fill[primary!10] (current page.north east) rectangle ++(-0.2, -\paperheight);
|
|
\fill[primary] (current page.north east) -- ++(0, -4.5) -- ++(-3.5, 4.5) -- cycle;
|
|
\fill[accentYellow] (current page.north east) ++(0, -4.5) -- ++(0, -0.4) -- ++(-3.81, 4.9) -- ++(0.4, 0) -- cycle;
|
|
\path (current page.north east) ++(-1.0, -1.5) node {\textcolor{primary!10}{\lr{\Large \faCogs}}};
|
|
\end{tikzpicture}%
|
|
}
|
|
|
|
\newcommand{\EvenPageShapesA}{%
|
|
\begin{tikzpicture}[remember picture, overlay]
|
|
\fill[primary!10] (current page.north west) rectangle ++(0.2, -\paperheight);
|
|
\fill[primary] (current page.north west) -- ++(0, -4.5) -- ++(3.5, 4.5) -- cycle;
|
|
\fill[accentYellow] (current page.north west) ++(0, -4.5) -- ++(0, -0.4) -- ++(3.81, 4.9) -- ++(-0.4, 0) -- cycle;
|
|
\path (current page.north west) ++(1.0, -1.5) node {\textcolor{primary!10}{\lr{\Large \faLightbulb}}};
|
|
\end{tikzpicture}%
|
|
}
|
|
|
|
\newcommand{\OddPageShapesB}{%
|
|
\begin{tikzpicture}[remember picture, overlay]
|
|
\fill[primary!10] (current page.north east) rectangle ++(-0.2, -\paperheight);
|
|
\fill[primary] (current page.south east) -- ++(0, 4.5) -- ++(-3.5, -4.5) -- cycle;
|
|
\fill[primary!20, opacity=0.8] (current page.south east) ++(-1, 0) -- ++(-3.5, 0) -- ++(4.5, 4.5) -- cycle;
|
|
\fill[accentYellow] (current page.south east) ++(-2.5, 0) -- ++(1, 1) -- ++(0, -1) -- cycle;
|
|
\path (current page.south east) ++(-1.2, 1.6) node {\textcolor{primary!10}{\lr{\Large \faMicrochip}}};
|
|
\end{tikzpicture}%
|
|
}
|
|
|
|
\newcommand{\EvenPageShapesB}{%
|
|
\begin{tikzpicture}[remember picture, overlay]
|
|
\fill[primary!10] (current page.north west) rectangle ++(0.2, -\paperheight);
|
|
\fill[primary] (current page.south west) -- ++(0, 4.5) -- ++(3.5, -4.5) -- cycle;
|
|
\fill[primary!20, opacity=0.8] (current page.south west) ++(1, 0) -- ++(3.5, 0) -- ++(-4.5, 4.5) -- cycle;
|
|
\fill[accentYellow] (current page.south west) ++(2.5, 0) -- ++(-1, 1) -- ++(0, -1) -- cycle;
|
|
\path (current page.south west) ++(1.2, 1.6) node {\textcolor{primary!10}{\lr{\Large \faNetworkWired}}};
|
|
\end{tikzpicture}%
|
|
}
|
|
|
|
\pagestyle{fancy}
|
|
\fancyhf{}
|
|
\renewcommand{\headrulewidth}{1.2pt}
|
|
|
|
\renewcommand{\headrule}{%
|
|
\ifodd\value{page}%
|
|
\hbox to\headwidth{\hspace{1.8cm}\color{primary}\leaders\hrule height \headrulewidth\hfill}%
|
|
\else%
|
|
\hbox to\headwidth{\color{primary}\leaders\hrule height \headrulewidth\hfill\hspace{1.8cm}}%
|
|
\fi
|
|
}
|
|
|
|
\renewcommand{\footrulewidth}{1.2pt}
|
|
\renewcommand{\footrule}{
|
|
\vspace*{0.6cm}
|
|
\hbox to\headwidth{\hfil\color{primary}\rule{0.8\headwidth}{\footrulewidth}\hfil}
|
|
\vspace*{-0.4cm}
|
|
}
|
|
|
|
% Using \AtBeginDocument ensures these headers can read variables (like \DocVersion) defined in main.tex
|
|
\AtBeginDocument{
|
|
\fancyhead[LO]{%
|
|
\hspace{1.8cm}%
|
|
\llap{\smash{\raisebox{-0.75cm}{\includegraphics[height=1.2cm]{logo.png}}}\hspace{0.3cm}}
|
|
\textcolor{primary}{\textbf{\DocTitle}}
|
|
}
|
|
\fancyhead[RE]{%
|
|
\textcolor{primary}{\textbf{\DocTitle}}
|
|
\rlap{\hspace{0.3cm}\smash{\raisebox{-0.75cm}{\includegraphics[height=1.2cm]{logo.png}}}}
|
|
\hspace{1.8cm}%
|
|
}
|
|
\fancyhead[RO]{\textcolor{gray}{نسخه \lr{\DocVersion}}}
|
|
\fancyhead[LE]{\textcolor{gray}{نسخه \lr{\DocVersion}}}
|
|
\fancyfoot[C]{\textcolor{gray}{صفحه \thepage}}
|
|
|
|
\fancyhead[C]{%
|
|
\ifModernShapes
|
|
\pgfmathtruncatemacro{\pagecycle}{mod(int((\value{page}-1)/2), 2)}
|
|
\ifnum\pagecycle=0
|
|
\ifodd\value{page} \OddPageShapesA \else \EvenPageShapesA \fi
|
|
\else
|
|
\ifodd\value{page} \OddPageShapesB \else \EvenPageShapesB \fi
|
|
\fi
|
|
\fi
|
|
}
|
|
}
|
|
|
|
\fancypagestyle{cover}{
|
|
\fancyhf{}
|
|
\renewcommand{\headrulewidth}{0pt}
|
|
\renewcommand{\footrulewidth}{0pt}
|
|
|
|
\fancyhead[C]{%
|
|
\ifModernShapes
|
|
\begin{tikzpicture}[remember picture, overlay]
|
|
\fill[primary] (current page.north west) -- ++(7.5,0) -- ++(-5, -5.5) -- cycle;
|
|
\fill[accentYellow] (current page.north west) ++(7.5,0) -- ++(0.6,0) -- ++(-5.6, -6.1) -- ++(-0.6,0) -- cycle;
|
|
\fill[primary!10] (current page.north west) ++(0, -5.5) -- ++(2.5,0) -- ++(-2.5, -2.5) -- cycle;
|
|
|
|
\fill[primary] (current page.south east) -- ++(-8.5, 0) -- ++(6, 6.5) -- cycle;
|
|
\fill[primary!20, opacity=0.8] (current page.south east) ++(-9.5, 0) -- ++(-1.5, 0) -- ++(8.5, 9) -- ++(1.5, 0) -- cycle;
|
|
\fill[accentYellow] (current page.south east) ++(-3.5, 0) -- ++(3.5, 3.8) -- ++(0, -3.8) -- cycle;
|
|
\end{tikzpicture}%
|
|
\fi
|
|
}
|
|
} |