Skip to content
Snippets Groups Projects
Commit 583adca2 authored by Abhiruk Lahiri's avatar Abhiruk Lahiri
Browse files

Style file to compile the main.

parent f6467ddf
No related branches found
No related tags found
No related merge requests found
%% socg-lipics-v2021.cls
%% Authors: Michael Hoffmann <hoffmann@inf.ethz.ch> and Irina Kostitsyna <i.kostitsyna@tue.nl>
%% Revision: $Rev: 6990 $ from $Date: 2021-02-16 15:30:31 +0100 (Tue, 16 Feb 2021) $
%% wrapper around lipics-v2021 to obtain a more consistent line numbering
%% we patch/hack some relevant commands and environments and see what happens...
\NeedsTeXFormat{LaTeX2e}[2015/01/01]
\ProvidesClass{socg-lipics-v2021}[2021/02/16 v0.8 Adapt LIPIcs class so that lineno counts and numbers more relevant lines]
%% prefix output by classname
\newcommand{\socgtypeout}[1]{\typeout{socg-lipics-v2021: #1}}%
%% process options
\RequirePackage{ifthen}
\RequirePackage{letltxmacro}
%% with nolines, run lipics plain
\newboolean{socgnolines}\setboolean{socgnolines}{false}
\DeclareOption{nolineno}{\setboolean{socgnolines}{true}}
%% with noalgorithm2e, do not try to fix algorithm2e environments
\newboolean{socgnoalgorithm2e}\setboolean{socgnoalgorithm2e}{false}
\DeclareOption{noalgorithm2e}{\setboolean{socgnoalgorithm2e}{true}}
%% with noalgorithms, do not try to fix algorithms (algorithm/algorithmic) package
\newboolean{socgnoalgorithms}\setboolean{socgnoalgorithms}{false}
\DeclareOption{noalgorithms}{\setboolean{socgnoalgorithms}{true}}
%% with nosubfigcap, do not try to fix subcaptions
\newboolean{socgnosubfigcap}\setboolean{socgnosubfigcap}{false}
\DeclareOption{nosubfigcap}{\setboolean{socgnosubfigcap}{true}}
%% with notab, do not wrap tabular into edtable
\newboolean{socgnotab}\setboolean{socgnotab}{false}
\DeclareOption{notab}{\setboolean{socgnotab}{true}}
%% with notcolorbox, do not try to fix tcolorbox
\newboolean{socgnotcolorbox}\setboolean{socgnotcolorbox}{false}
\DeclareOption{notcolorbox}{\setboolean{socgnotcolorbox}{true}}
%% pass all the rest to LIPIcs
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{lipics-v2021}}
\ProcessOptions\relax
%% set all line numbering options for algorithm2e
\ifthenelse{\boolean{socgnolines}}{%
}{%
\ifthenelse{\boolean{socgnoalgorithm2e}}{%
}{%
\PassOptionsToPackage{linesnumbered,commentsnumbered,inoutnumbered,titlenumbered}{algorithm2e}
}%
%% set longtable -> edtable option to handle tabular
\ifthenelse{\boolean{socgnotab}}{%
}{%
\PassOptionsToPackage{longtable}{lineno}}%
}% !socgnolines
%% load LIPIcs class
\LoadClass{lipics-v2021}[2021/01/04]%
\ifthenelse{\boolean{socgnolines}}{%
\newcounter{socglastlinecounter}%
\newcommand{\socgnl}{}%
\nolinenumbers%
\endinput
}{}
%% hide LIPIcs DOI
\def\@DOIPrefix{}
%% \socgnl = number line: allows to manually add the current linenumber to a
%% single line if placed at the start of that line
\newsavebox{\socgnlbox}%
\newcommand{\socgnl}{%
\sbox{\socgnlbox}{\mbox{\linenumberfont\LineNumber\hskip\linenumbersep}}%
\hspace*{-\wd\socgnlbox}\usebox{\socgnlbox}\stepcounter{linenumber}%
}
%% used in captions
\newcommand{\socglipicsyellowdot}{%
\kern0.05em{\color[rgb]{0.99,0.78,0.07}\rule{0.73em}{0.73em}}\hspace*{0.67em}}
%% add line numbers to all captions
\DeclareCaptionTextFormat{socgnumberitall}{\internallinenumbers #1}
\captionsetup{textformat=socgnumberitall}%
%% handle subcaptions (this is a hack, really)
\ifthenelse{\boolean{socgnosubfigcap}}{
}{%
\socgtypeout{fix subcaptions}
\RequirePackage{zref-savepos}
\newcounter{socgstartofnewfloat}\setcounter{socgstartofnewfloat}{0}
\newcounter{socglinenumbertmp}\newcounter{socglinenumbermax}
\newcounter{socgsubfigcount}\setcounter{socgsubfigcount}{0}
\newcounter{socgsubfiglastpos}\setcounter{socgsubfiglastpos}{0}
\let\socgsubcaption\subcaption%
\def\subcaption#1{%
\stepcounter{socgsubfigcount}%
\zsavepos{\arabic{socgsubfigcount}}%
\ifthenelse{\value{socgstartofnewfloat}=1\and\value{socgsubfiglastpos}>\zposx{\arabic{socgsubfigcount}}}{%
\socgtypeout{add newline in Fig. \thefigure : \thesubfigure}%
\setcounter{socgstartofnewfloat}{0}%
}{%
}%
\setcounter{socgsubfiglastpos}{\zposx{\arabic{socgsubfigcount}}}%
\ifthenelse{\value{socgstartofnewfloat}=0}{%
\setcounter{socgstartofnewfloat}{1}%
\setcounter{socglinenumbermax}{0}%
\setcounter{socglinenumbertmp}{\value{linenumber}}%
}{%
\setcounter{linenumber}{\value{socglinenumbertmp}}
}%
\socgsubcaption{\internallinenumbers #1}%
\ifthenelse{\value{linenumber} >\value{socglinenumbermax}}{%
\setcounter{socglinenumbermax}{\value{linenumber}}}%
{%
}%
\setcounter{linenumber}{\value{socglinenumbermax}}%
}
\let\socgendfigure\endfigure
\def\endfigure{\setcounter{socgstartofnewfloat}{0}\socgendfigure}
\let\socgendtable\endtable
\def\endtable{\setcounter{socgstartofnewfloat}{0}\socgendtable}
\@ifpackagelater{subcaption}{2019/08/28}{%
\socgtypeout{subcaption is from 2019+}
\let\socgsubcaptionminipage\subcaption@iiminipage
\renewcommand*\subcaption@iiminipage[3]{%
\let\socgrealsubcaption\subcaption%
\socgsubcaptionminipage{#1}{#2}{#3}%
\renewcommand{\caption}[1]{\socgrealsubcaption{##1}}\relax}%
}{%
\socgtypeout{subcaption is from before 2019}
%% replace subfigure/caption by subcaption
\renewcommand*\subcaption@minipage[2]{%
\minipage#1{#2}%
\renewcommand{\caption}[1]{\subcaption{##1}}\relax}%
}%
}
%% number footnotes by wrapping them into a minipage
\let\socgfootnote=\footnote
\newcommand{\socgnumberfootnotes}{%
\gdef\footnote##1{%
\socgfootnote{%
\begin{minipage}[t]{.978\linewidth}\internallinenumbers\setlength\linenumbersep{2em}
##1
\end{minipage}\vspace{1pt plus .5pt minus .5pt}%
}%
}%
}
%% don't number frontmatter
\let\socgrealmaketitle=\maketitle
\renewcommand{\maketitle}{\nolinenumbers\socgrealmaketitle\linenumbers}
%% ... not even subject classification, doi, etc.
\let\socgabstract=\abstract
\let\socgendabstract=\endabstract
\newcounter{socglastlinecounter}
\renewenvironment{abstract}{%
\socgabstract%
}{%
\par\begin{nolinenumbers}
\socgendabstract
\end{nolinenumbers}%
\socgnumberfootnotes%
}
%% to list the lines, look where the references start
\RequirePackage[absolute]{textpos}
\AtBeginDocument{%
\let\socgthebibliography=\thebibliography
\renewcommand{\thebibliography}{%
\setcounter{socglastlinecounter}{\value{linenumber}}%
\addtocounter{socglastlinecounter}{-1}%
\makeatletter\write\@auxout{\noexpand\setcounter{socglastlinecounter}{\thesocglastlinecounter}}\makeatother%
\socgthebibliography}%
\begin{textblock*}{.75\textwidth}(\oddsidemargin,28mm)
{\ifnum\value{socglastlinecounter}>500\color{red}\fi{\bfseries Lines:\enskip}\arabic{socglastlinecounter}\hfill}
\end{textblock*}}
%% wrap tabular into edtable
\ifthenelse{\boolean{socgnotab}}{%
}{%
\socgtypeout{fix tabular}
\let\socgtabular\tabular%
\let\endsocgtabular\endtabular%
\renewenvironment{tabular}{\begin{edtable}{socgtabular}}{\end{edtable}}%
}
%% fix align etc. "double line number issue"
%% see https://tex.stackexchange.com/questions/436011/linenomath-printing-extra-numbers-on-last-line-of-multline-align-flalign-envir
\newcommand*{\socgPatchAmsMathEnvironmentForLineno}[1]{%
\renewenvironment{#1}%
{\linenomath\postdisplaypenalty=0\csname old#1\endcsname}%
{\csname oldend#1\endcsname\endlinenomath}}%
\newcommand*\socgpatchBothAmsMathEnvironmentsForLineno[1]{%
\socgPatchAmsMathEnvironmentForLineno{#1}%
\socgPatchAmsMathEnvironmentForLineno{#1*}}%
\AtBeginDocument{%
\socgpatchBothAmsMathEnvironmentsForLineno{align}%
\socgpatchBothAmsMathEnvironmentsForLineno{flalign}%
\socgpatchBothAmsMathEnvironmentsForLineno{alignat}%
\socgpatchBothAmsMathEnvironmentsForLineno{gather}%
\socgpatchBothAmsMathEnvironmentsForLineno{multline}}%
%% number tcolorboxes (just the vanilla ones...)
\ifthenelse{\boolean{socgnotcolorbox}}{%
}{%
\socgtypeout{fix tcolorbox}
\AtBeginDocument{%
\@ifpackageloaded{tcolorbox}{%
\LetLtxMacro\socgtcolorbox\tcolorbox%
\LetLtxMacro\endsocgtcolorbox\endtcolorbox%
\renewenvironment{tcolorbox}[1][]{%
\nolinenumbers%
\socgtcolorbox[#1]\internallinenumbers%
\addtolength{\linenumbersep}{\kvtcb@leftupper}%
\addtolength{\linenumbersep}{\kvtcb@boxsep}}{%
\endsocgtcolorbox%
\endnolinenumbers}%
}{%
}% package tcolorbox loaded
}% AtBeginDocument
}% if socgtcolorbox
%% fix algorithms
\ifthenelse{\boolean{socgnoalgorithms}}{%
}{%
\newboolean{socgalgorithmicorx}\setboolean{socgalgorithmicorx}{false}
\AtBeginDocument{%
\@ifpackageloaded{algorithmic}{\setboolean{socgalgorithmicorx}{true}}{}
\@ifpackageloaded{algorithmicx}{\setboolean{socgalgorithmicorx}{true}}{}
\ifthenelse{\boolean{socgalgorithmicorx}}{%
\socgtypeout{fix algorithmic(x)}%
\LetLtxMacro\socgalgorithmic\algorithmic%
\LetLtxMacro\endsocgalgorithmic\endalgorithmic%
\renewenvironment{algorithmic}[1][]{%
\socgalgorithmic[#1]\internallinenumbers}{%
\endsocgalgorithmic}% end of environment algorithmic
}{%
}% package algorithmic or algorithmicx loaded
\@ifpackageloaded{algorithm}{%
\socgtypeout{fix algorithm}
\LetLtxMacro\socgalgorithms\algorithm%
\LetLtxMacro\endsocgalgorithms\endalgorithm%
\renewenvironment{algorithm}[1][]{%
\socgalgorithms[#1]%
\LetLtxMacro\socgcaption\caption%
\renewcommand{\caption}[2][]{%
\socgcaption[##1]{\internallinenumbers ##2}}%
}{\endsocgalgorithms}% end of environment algorithm
}{%
}% package algorithm loaded
}% AtBeginDocument
}% if socgalgo
%% fix algorithm2e
\ifthenelse{\boolean{socgnoalgorithm2e}}{%
}{%
\AtBeginDocument{%
\@ifpackageloaded{algorithm2e}{%
\socgtypeout{fix algorithm2e}%
\expandafter\LetLtxMacro\expandafter\socgalgorithmte\csname\algocf@envname\endcsname%
\expandafter\LetLtxMacro\expandafter\endsocgalgorithmte\csname end\algocf@envname\endcsname%
\renewenvironment{\algocf@envname}[1][]{%
\begin{nolinenumbers}%
\socgalgorithmte[#1]%
\SetAlCapFnt{\small\sffamily}%
\SetAlCapNameFnt{\small\upshape}%
\setcounter{AlgoLine}{\value{linenumber}}\addtocounter{AlgoLine}{-1}%
}{%
\ifthenelse{\value{linenumber}<\value{AlgoLine}}{%
\setcounter{linenumber}{\value{AlgoLine}}\stepcounter{linenumber}%
}{%
}%
\endsocgalgorithmte%
\end{nolinenumbers}%
}% end of environment algorithm2e
%% font for line numbers
\renewcommand{\relsize}[1]{\normalfont\tiny\sffamily}%
\newcommand{\socgalgocaption}[2]{%
\begin{minipage}[t]{\hsize}\internallinenumbers%
\socglipicsyellowdot{#1}{~}\AlCapNameSty{\AlCapNameFnt{}#2}%
\end{minipage}%
}%
%% there are two caption types: (1) above the code
\renewcommand{\algocf@makecaption@ruled}[2]{%
\global\sbox\algocf@capbox{\socgalgocaption{#1}{#2}}%
\setcounter{AlgoLine}{\value{linenumber}}\addtocounter{AlgoLine}{-1}%
}% end of algocf@makecaption@ruled
%% ... and (2) below, which we dress more like the LIPIcs style
\renewcommand{\algocf@makecaption}[2]{%
\setcounter{linenumber}{\value{AlgoLine}}\stepcounter{linenumber}%
\socgalgocaption{#1}{#2}%
}% end of algocf@makecaption
}{}% package algorithm2e loaded
}% AtBeginDocument
}% if socgalgo2e
\endinput
% Local Variables:
% mode: latex
% End:
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment