% !TeX root=NIC06_2025.tex
% !XeLaTeX TS-program = XeLaTeX
% کنفرانس ملی انفورماتیک ایران
% دبیر انتشارات: مرتضی ذاکری 
% zakeri@ipm.ir

% نام قالب را تعیین می کند و همچنین بیان می کند که آخرین به روز رسانی  این قالب در چه زمانی بوده است. 
\ProvidesClass{NIC}[2024/03/20]

% تمام پارامترهای ورودی برای تنظیم متن را به کلاس زیر ارسال می‌کنیم
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions % Now we'll execute any options passed in

\LoadClass[11pt, twocolumn]{article}

\usepackage[T1]{fontenc}
%\usepackage{titlesec}
\usepackage{setspace}
\usepackage{pdflscape}
%\usepackage{lscape}
\usepackage{titling}

% تمام بسته های مورد نیاز برای ایجاد یک مقاله به صورت کامل اینجا آورده شده است در صورتی که بخواهید از بسته های دیگر استفاده کنید بهتر است که آن‌ها را به گونه ای انتخاب کنید که با این بسته ها تداخل نداشده باشد. 
\RequirePackage{amsthm, amsmath, amssymb, amsfonts}
% اگر بخواهید چند شکل را در کنار همدیگر داشته باشید، از این بسته استفاده می‌کنیم.
\RequirePackage{subcaption}
\RequirePackage[x11names,dvipsnames,svgnames,table]{xcolor}
%بسته‌ای برای نوشتن محیط الگوریتم
\RequirePackage{algorithm}
\RequirePackage{algorithmic}
%\usepackage{algorithm2e}

\RequirePackage{cuted}
\usepackage{cite} % Add by Morteza %
\usepackage{etoolbox}
\usepackage{comment}
\let\citep\cite
\let\citelatin\cite
\let\citeplatin\cite


\usepackage{tabularx}
\usepackage{makecell}
%%%

% در این قالب از بسته graphx برای انجام کارهای گرافیکی استفاده می‌شود. این بسته
% برای اضافه کردن تصویرها به متن استفاده شده است.
\RequirePackage{graphicx}
\usepackage[export]{adjustbox}

\RequirePackage{fancyhdr}
% بسته‌ای برای تبدیل تمامی پاورقی‌ها به آخرنویس
%\RequirePackage{endnotes}

% بسته‌ای برای وارد کردن اسامی نویسندگان در مقاله
\RequirePackage{authblk}
% after loading fancyhdr and authblk
\RequirePackage{xparse}
% برای تنظیم حاشیه صفحات، لطفا این تنظیم را تغییر ندهید.
\RequirePackage[top=25mm, bottom=20mm, left=15mm, right=15mm, a4paper]{geometry}
%\usepackage{minipage-marginpar}
%تنظیمات مربوط به طول ستون‌ها و فاصله بین آن‌ها. لطفا این تنظیم را تغییر ندهید.
\setlength{\columnwidth}{87mm}
\setlength{\columnsep}{6mm}



% بسته‌ٔ لازم برای: ۱. تغییر شماره‌گذاری صفحات پیوست. ۲. تصحیح باگ آدرس وب حاوی '%' در مراجع
\usepackage{etoolbox}
\usepackage{comment}

% بسته ای برای رنگی کردن لینک ها و فعال سازی لینک ها در یک نوشتار، بسته hyperref باید جزو آخرین بسته‌هایی باشد که فراخوانی می‌شود. 
%\RequirePackage[pagebackref =true,colorlinks=true,citecolor=blue]{hyperref}
%\RequirePackage[unicode=true, pagebackref=true, colorlinks, linkcolor=Blue, citecolor=Purple, urlcolor=Red, bookmarks=true]{hyperref}
	\usepackage[unicode=true, pagebackref=false, colorlinks, linkcolor=Blue, citecolor=DarkViolet, urlcolor=DarkBlue, bookmarks=true, linktocpage, breaklinks]{hyperref}
    
    

\usepackage{titlesec}
\usepackage{secdot}
\sectiondot{subsection}
\titlespacing\section{30pt}{30pt plus 4pt minus 2pt}{30pt plus 2pt minus 2pt}
%\titlespacing\subsection{0pt}{6pt plus 4pt minus 2pt}{4pt plus 2pt minus 2pt}
%\titlespacing\subsubsection{0pt}{6pt plus 4pt minus 2pt}{4pt plus 2pt minus 2pt}
%
\titlespacing*\section{30pt}{30pt plus 2pt minus 2pt}{30pt plus 2pt minus 2pt}
\titlespacing*\subsection{0pt}{0pt plus 1pt minus 1pt}{0pt plus 1pt minus 1pt}
\titlespacing*\subsubsection{0pt}{0pt plus 1pt minus 1pt}{0pt plus 1pt minus 1pt}
%
%\renewcommand{\baselinestretch}{1.10} 



% بسته زیر باگ ناشی از فراخوانی بسته‌های زیاد را برطرف می‌کند.
\usepackage{morewrites}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% بسته Xepersian برای پشتیبانی از زبان فارسی آورده شده است و می‌بایست آخرین بسته‌ای باشد که شما وارد می کنید.
\usepackage{xepersian}
%  تنظیم اندازه فونت‌ها
% Persian font
\settextfont[Path={./fonts/}, BoldFont={XBNiloofarBd.ttf}, ItalicFont={XBNiloofarIt.ttf}, BoldItalicFont={XBNiloofarBdIt.ttf}, Scale=1]{XBNiloofar.ttf}
%% Latin font
\setlatintextfont[Path={./fonts/LinLibertine/}, BoldFont={linlibertine-bd.ttf}, ItalicFont={linlibertine-it.ttf}, BoldItalicFont={linlibertine-bi.ttf}, Scale=0.91]{linlibertine-re.ttf}

\defpersianfont\titlefont[Path={./fonts/}, Scale=1.63]{XBNiloofarBd.ttf}
\defpersianfont\abstractbold[Path={./fonts/}, Scale=0.91]{XBNiloofarBd.ttf}
\defpersianfont\captionbold[Path={./fonts/},  Scale=0.91]{XBNiloofarBd.ttf}

%%  با استفاده از این دستور می‌توان فونت و فارسی و یا انگلیسی بودن اعداد در فرمول‌ها را به حالت اولیه (یعنی پیش‌فرض لاتک) برگرداند.

%\DefaultMathsDigits
%\setdigitfont[Scale=1]{XB Zar}%{Persian Modern}
% چنانچه می‌خواهید اعداد در فرمول‌ها، انگلیسی باشد، خط زیر را غیرفعال کنید
\setmathdigitfont[Path={./fonts/}, BoldFont={XBNiloofarBd.ttf}, ItalicFont={XBNiloofarIt.ttf}, BoldItalicFont={XBNiloofarBdIt.ttf}, Scale=1.0]{XBNiloofar.ttf}



%% اختصاص - به عنوان جداکننده شماره بخش و زیربخش
\SepMark{-}


% تغییر نام algorithm به الگوریتم
\floatname{algorithm}{الگوریتم}

% با دستور زیر اندازه فرمولها را تغییر می‌دهیم. این دستور با فونت اندازه ۱۲ به خوبی کار می‌کند ولی با فونت اندازه ۱۱ که دراین مقاله استفاده نموده‌ام که ۶ صفحه بیشتر نشود، مشکلاتی دارد. به سایت: زیر مراجعه فرمایید: http://www.latex-community.org/forum/viewtopic.php?f=5&t=1792
\DeclareMathSizes{10.95}{9.2}{7.3}{5.5} %12,10,8,6

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% تغییر در عنوان صفحه شروع، و تنظیم فونت و فاصله
\bidi@patchcmd{\@maketitle}{\@title}{\vskip 15mm\titlefont\@title}

% دستوراتی برای نحوه نمایش اسامی نویسندگان

\renewcommand\Authands{ و }
\renewcommand*{\Authand}{ و }
\renewcommand\Authfont{\scshape\small}
\renewcommand\Affilfont{\small}

%\newenvironment{myonecolumn}{\@twocolumnfalse}{}

% دستوری برای حذف حاشیه قسمت چکیده
\renewenvironment{abstract}{%
}{}

\linespread{1.15}

\let\AbstractBold\bfseries % dummy 

\renewenvironment{abstract}{%
%\strip
\small \abstractbold\noindent\textbf{\Large چکیده}%
\vskip 2mm
}
%{\endstrip}


\newenvironment{keywords}{
%\strip
\vskip 3mm
\abstractbold
%
\noindent\textbf{\Large کلیدواژه‌ها}%
\vskip 2mm
}{%
%\endstrip
\vskip 0.45cm
}



%% here

%% باز تعریف محیط شکل
\bidi@AtBeginEnvironment{figure}{
\def\@floatboxreset{\reset@font\centering\@setminipage}%
}


\theoremstyle{plain}
\newtheorem{theorem}{قضیه}
\newtheorem{principle}{اصل}
\newtheorem{lemma}{لم}
\newtheorem{proposition}{گزاره}
\theoremstyle{definition}
\newtheorem{definition}{تعریف}
\theoremstyle{remark}
\newtheorem{corollary}{نتیجه}
\newtheorem{remark}{ملاحظه}


%% تعریف یک محیط برای  اثبات لم‌ها. در این محیط بر خلاف محیط proof ساده، یک مربع توخالی می‌گذارد. 
\let\oldproof\proof
\let\oldendproof\endproof
\def\lemmaproof{\paragraph{\textit{اثبات لم.}}}
\def\endlemmaproof{\hfill$\blacksquare$\oldendproof}

\bibliographystyle{ieeetr-fa}
%\renewcommand*{\bibname}{مراجع}


\let\Oldbibliography\bibliography

\renewcommand{\bibliography}[1]{
\baselineskip=0.4cm
\settextfont[Path={./fonts/}, Scale=0.91]{XBNiloofar.ttf}
\setlatintextfont[Path={./fonts/LinLibertine/}, BoldFont={linlibertine-bd.ttf}, ItalicFont={linlibertine-it.ttf}, BoldItalicFont={linlibertine-bi.ttf}, Scale=0.82]{linlibertine-re.ttf}
\Oldbibliography{#1}
\settextfont[Path={./fonts/}, Scale=0.91]{XBNiloofar.ttf}
\setlatintextfont [Path={./fonts/LinLibertine/}, BoldFont={linlibertine-bd.ttf}, ItalicFont={linlibertine-it.ttf}, BoldItalicFont={linlibertine-bi.ttf}, Scale=0.82]{linlibertine-re.ttf}
}%




% حذف شماره صفحه از تمامی صفحات
\pagenumbering{gobble}


\begin{comment}
    content...


% دستورات لازم به منظور تغییر تمامی footnote ها و LTRfootnote ها به endnote
\def\LTRendnote{\@ifnextchar[\@xendnote{\stepcounter{endnote}%
     \protected@xdef\@theenmark{\theendnote}%
     \@endnotemark\@LTRendnotetext}}
\def\RTLendnote{\@ifnextchar[\@xendnote{\stepcounter{endnote}%
     \protected@xdef\@theenmark{\theendnote}%
     \@endnotemark\@RTLendnotetext}}
\let\@LTRdoanenote=0
\let\@RTLdoanenote=0
\long\def\@endnotetext#1{%
     \if@enotesopen \else \@openenotes \fi
     \immediate\write\@enotes{\@doanenote{\@theenmark}}%
     \begingroup
        \def\next{\if@RTL@footnote\else\latinfont\fi#1}%
        \newlinechar='40
        \immediate\write\@enotes{\meaning\next}%
     \endgroup
     \immediate\write\@enotes{\@endanenote}}
\long\def\@LTRendnotetext#1{%
     \if@enotesopen \else \@openenotes \fi
     \immediate\write\@enotes{\@LTRdoanenote{\@theenmark}}%
     \begingroup
        \def\next{\latinfont#1}%
        \newlinechar='40
        \immediate\write\@enotes{\meaning\next}%
     \endgroup
     \immediate\write\@enotes{\@endanenote}}
\long\def\@RTLendnotetext#1{%
     \if@enotesopen \else \@openenotes \fi
     \immediate\write\@enotes{\@RTLdoanenote{\@theenmark}}%
     \begingroup
        \def\next{\persianfont#1}%
        \newlinechar='40
        \immediate\write\@enotes{\meaning\next}%
     \endgroup
     \immediate\write\@enotes{\@endanenote}}
\def\theendnotes{\immediate\closeout\@enotes \global\@enotesopenfalse
  \begingroup
    \makeatletter
    \edef\@tempa{`\string >}%
    \ifnum\catcode\@tempa=12%
      \let\@ResetGT\relax
    \else
      \edef\@ResetGT{\noexpand\catcode\@tempa=\the\catcode\@tempa}%
      \@makeother\>%
    \fi
    \def\@doanenote##1##2>{\def\@theenmark{##1}\par\begingroup\if@RTL@footnote\@RTLtrue\else\@RTLfalse\fi
        \@ResetGT
        \edef\@currentlabel{\csname p@endnote\endcsname\@theenmark}%
        \enoteformat}
     \def\@LTRdoanenote##1##2>{\def\@theenmark{##1}\par\begingroup\@RTLfalse
        \@ResetGT
        \edef\@currentlabel{\csname p@endnote\endcsname\@theenmark}%
        \enoteformat}
         \def\@RTLdoanenote##1##2>{\def\@theenmark{##1}\par\begingroup\@RTLtrue
        \@ResetGT
        \edef\@currentlabel{\csname p@endnote\endcsname\@theenmark}%
        \enoteformat}
    \def\@endanenote{\par\endgroup}%
    \enoteheading
    \enotesize
    \input{\jobname.ent}%
  \endgroup}

\let\footnote=\endnote
\let\footnote\endnote
\let\RTLfootnote\RTLendnote
\let\LTRfootnote\LTRendnote
\renewcommand{\notesname}{\large{پانویس‌ها}}
\end{comment}


% تنظیم فاصله قبل و بعد از فرمول
\g@addto@macro\normalsize{%
  \setlength\abovedisplayskip{5pt}
  \setlength\belowdisplayskip{5pt}
  \setlength\abovedisplayshortskip{5pt}
  \setlength\belowdisplayshortskip{5pt}
}

\bidi@patchcmd{\list}{\parskip\parsep}{\parskip-3pt}{}{}



\makeatletter
\renewcommand\section{\@startsection {section}{1}{\z@}%
 {-7.06939pt \@plus -4.30554pt \@minus -.861108pt}%
 {3.902742pt \@plus.861108pt}%
{\normalfont\Large\bfseries}}
\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
{-5.99pt\@plus -3.30554pt \@minus -.861108pt}%
{3.45831pt \@plus .861108pt}%
 {\normalfont\large\bfseries}}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
{-5.99pt\@plus -3.30554pt \@minus -.861108pt}%
 {3.45831pt \@plus .861108pt}%
 {\normalfont\normalsize\bfseries}}
\makeatother


%%% Some other packages
\usepackage{textgreek}
\usepackage{booktabs}  % professional-quality tables
\usepackage{amsfonts}  % blackboard math symbols
\usepackage{nicefrac}  % compact symbols for 1/2, etc.
\usepackage{microtype}  % microtypography
%\usepackage{amsmath}
%\usepackage{flushend} % Automatically balance the final columns
\usepackage{balance, xpatch}          % manual trigger
\usepackage{etoolbox}

\usepackage[algo2e, ruled, linesnumbered, resetcount]{algorithm2e}
\def\HiLi{\leavevmode\rlap{\hbox to \hsize{\color{yellow!50}\leaders\hrule height .8\baselineskip depth .5ex\hfill}}}

\makeatletter
\newcommand{\removelatexerror}{\let\@latex@error\@gobble}
\makeatother

%% Set the font-size of Figure and Table captions
\DeclareCaptionFont{mysize}{\captionbold}
\captionsetup{font=mysize}

% ---------------------------------------------------


% 2) Define a user‐level macro
\newcommand\setFirstPageFooter[1]{%
  % a) Turn on the fancy pagestyle globally
  \pagestyle{fancy}%
  \fancyhead{}% clear any headers
  \fancyfoot{}% clear any footers
  % b) Adjust footskip
  \setlength{\footskip}{32pt}%
  % c) Define the 'firstpage' pagestyle
  \fancypagestyle{firstpage}{%
    \fancyhf{}% clear headers & footers
    % remove header band entirely
    \renewcommand{\headrulewidth}{0pt}%
    \setlength{\headheight}{0pt}%
    \setlength{\headsep}{0pt}%
    % disable global footrule
    \renewcommand{\footrulewidth}{0pt}%
    % place footer in right (RTL “first”) column
    \fancyfoot[R]{%
      \vspace*{-7ex}% nudge up
      \begin{minipage}[t]{\columnwidth}%
        \vspace{0.5ex}%
        \rule{0.95\columnwidth}{0.5pt}\par% short rule
        \vspace{0.5ex}%
        \footnotesize
        #1% ← here’s your argument
      \end{minipage}%
    }%
  }%
}
% ---------------------------------------------------

 

 \makeatletter
% 1) Storages for paper title and conference info
\newcommand\@confinfo{}
%%%%%%%%%%
%%%%%%%%%%
% 2) User commands to set title & conference info
%%
% 2.1) Define an initially empty \shorttitle
\newcommand\shorttitle{}
% 2.2) Provide a helper to set it
\newcommand\setshorttitle[1]{\renewcommand\shorttitle{#1}}
% 2.3) 
\newcommand\setConferenceInfo[1]{%
\gdef\@confinfo{#1}%
}



% 3) Storage for the full \maketitle author block
\newcommand\@ourauthorlist{}      
% 4) Storage for the comma list of short names
\newcommand\shortauthornames{}         % create it (empty)
\let\shortauthornames\@empty          % “empty” sentinel
   

% 5) Reset both lists
\newcommand\clearAuthors{%
\global\let\@ourauthorlist\@empty
\global\def\shortauthornames{}% start truly empty
}

%%%%%%%%%%
%%%%%%%%%%
 % #1 = optional “short name” for the header (defaults to full name)
 % #2 = full name
 % #3 = rank/org
 % #4 = affiliation, city
 % #5 = email
\NewDocumentCommand{\DeclareAuthor}{ O{} m m m m }{%
% 1) Determine which name goes into the short‐list:
%\begingroup
    \IfNoValueTF{#1}%
      {\gdef\@shortnametmpa{#2}}   % no optional ⇒ use full name
      {\gdef\@shortnametmpa{#1}}   % optional given ⇒ use that
 % \xdef\@shortnametmpa{\shortnametmp}
%\endgroup
  
% 2) Append to \shortauthornames, comma‐separated
    \ifx\shortauthornames\@empty
      \global\gdef\shortauthornames{\@shortnametmpa}%
    \else
      \gappto\shortauthornames{, \@shortnametmpa}%
   \fi

%%%%%%%%%%
%%%%%%%%%%
% 3) Build the “\@author” content for \maketitle:
\gappto\@ourauthorlist{%
\textbf{#2}\authorcr                 % bold full name
 {\footnotesize #3}\authorcr           % rank/org
{\footnotesize #4}\authorcr           % affiliation, city
{\footnotesize (رایانامه: \rm\lr{#5})}                  % email
\and                                  % next author
}%

% 4) Copy it into LaTeX’s \@author so \maketitle picks it up:
\gdef\@author{\@ourauthorlist}%
}

% 5) (Optional) If you really want \@shortauthornames to exist:
\let\@shortauthornames\shortauthornames


% Define the user-level macro
% #1 = full conference info (RE & LO)
% #2 = short paper title    (RO)
% #3 = authors list         (LE)
\newcommand\setConferenceHeader[3]{%
  % 1) Arabic page numbers + fancy style
  \pagenumbering{arabic}%
  \pagestyle{fancy}%
  \fancyhf{}% clear headers & footers

  % 2) Always show \leftmark on the left
  \lhead{\leftmark}%

  % 3) Conference info in RE & LO
  \fancyhead[RE,LO]{\footnotesize #1}%

  % 4) Short title on RO
  \fancyhead[RO]{\footnotesize #2}%

  % 5) Authors on LE
  \fancyhead[LE]{\footnotesize #3}%

  % 6) Thin header rule, no footer rule
  \renewcommand{\headrulewidth}{0.025pt}%
  \renewcommand{\footrulewidth}{0pt}%
}
% ---------------------------------------------------
\makeatother