Skip to content

Commit

Permalink
new file: seqcode.sty
Browse files Browse the repository at this point in the history
  • Loading branch information
Jon-Fredrik Nielsen committed Aug 17, 2020
1 parent 8f10317 commit 4bd1b28
Showing 1 changed file with 192 additions and 0 deletions.
192 changes: 192 additions & 0 deletions UserGuide/seqcode.sty
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
%%
%% This is file `seqcode.sty'
%%
%% It is supposed to help you easily include MATLAB source code
%% into LaTeX document, but have it nicely highlighted, unsing
%% the great listings package.
%%
%% Usage: Include your MATLAB source code by using
%%
%% \begin{lstlisting}
%% YOUR CODE HERE
%% \end{lstlisting}
%%
%% or as an inline object via \seqcode{YOURCODE}.
%%
%% For your convenience, this package has the following options:
%%
%% - bw if you intend to print the document (highlighting done
%% via text formatting (bold, italic) and shades of gray)
%%
%% - numbered if you want line numbers
%%
%% - framed if you want a frame around the source code blocks
%%
%% - final if you have ``gloablly'' set the draft option, the
%% listings package will not output the code at all. to
%% force it to do so anyway, load this package with the
%% final option (passes the ``final'' on to listings).
%%
%% Example of use: \usepackage[numbered,framed]{seqcode}
%% in your document preamble.
%%
%% Note: inside code blocks you can 'escape' to LaTeX math mode
%% by using § YOUR LATEX CODE §, which is especially useful in
%% comments...
%%
%% Another feature of the listings package is that you can re-
%% place certain strings by LaTeX strings; this is used for
%% some relation symbols, see below...
%%
%% Mat Odijk pointed this out, you may include entire m-files
%% using the command \lstinputlisting{YOUR-FILE.m}. Thanks for
%% the tip!
%%
%% Feel free to edit things, and refer to the listings package
%% documentation for more infos.
%%
%% If you have any questions, feel free to ask: [email protected]
%%
%% Usolved problem: long lines of code that are wrapped with
%% '...', and things thereafter being comments.....
%% but i'm working on it ;-)
%%
%% Author: Florian Knorn, [email protected]
%%
%% Version history:
%% 1.2 -- Added \lstset{showstringspaces=false}
%% 1.1 -- Added \seqcode command and [final] option
%% 1.0 -- Release

\def\fileversion{1.2}
\def\filedate{2005/11/17}

\typeout{Package: `seqcode' \fileversion\space <\filedate>}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{seqcode}[\filedate\space\fileversion]

% for bw-option
\newif\ifbw
\DeclareOption{bw}{\bwtrue}
\ifbw\typeout{seqcode: settings optimized for printing!}
\else\typeout{seqcode: settings optimized for display!}\fi

% numbered option
\newif\ifnumbered
\DeclareOption{numbered}{\numberedtrue}

% final option
\newif\iffinal
\DeclareOption{final}{\finaltrue}

% for framed option
\newif\ifframed
\DeclareOption{framed}{\framedtrue}

\DeclareOption*{% default
\PackageWarning{seqcode}{Unknown option `\CurrentOption' !}%
}
\ProcessOptions

% with this command, you can typeset syntax highlighted seqcode ``inline'',
% for example when you talk about \seqcode{for}--loops ...
\newcommand{\seqcode}[1]{\lstinline[basicstyle=\lstbasicfont]|#1|}

% check if color command exists
\ifx\color\undefined%
\RequirePackage{color}%
\fi

% check if listings has been loaded
\ifx\lstset\undefined%
\iffinal
\RequirePackage[final]{listings}
\else
\RequirePackage{listings}
\fi
\fi

% check if textcomp has been loaded (this package is needed
% for upright quotes '' (instead of typographic ones `´)...
\ifx\textasciigrave\undefined%
\RequirePackage{textcomp}%
\fi

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% C O N F I G S --- C U S T O M I Z E H E R E %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% define the wanted font for all highlightings here
\def\lstbasicfont{\fontfamily{pcr}\selectfont}

% now let's define our own version of matlab highlighting
\lstdefinelanguage{matlabfloz}{%
alsoletter={...},%
morekeywords={catch,continue,elseif,else,end,for,function,global,
if,otherwise,persistent,return,switch,try,while,...},
morecomment=[l]{\#},
morecomment=[s][\keywordcolor]{[}{]},
}

\newcommand\numstyle{\textcolor{black}}

\lstdefinestyle{basic}{
basicstyle={\small\ttfamily},
keywordstyle={\keywordstyle},
linewidth={\textwidth}
}

\ifbw % use font formating and gray 'colors'
\newcommand\keywordcolor{\bfseries}
\lstset{language=matlabfloz, % use our version of highlighting
keywordstyle=\bfseries, % keywords in bold
commentstyle=\color[gray]{0.6}\itshape, % comments light gray and italic
stringstyle=\color[gray]{0.5} % strings darker gray
}
\else% notbw => use colors : )
\newcommand\keywordcolor{\color[rgb]{0,0,1}}
\lstset{language=matlabfloz, % use our version of highlighting
keywordstyle=\color[rgb]{0,0,1}, % keywords
commentstyle=\color[rgb]{0.133,0.545,0.133}, % comments
stringstyle=\color[rgb]{0.627,0.126,0.941}, % strings
}
\fi%bw

\lstset{%
basicstyle={\lstbasicfont\footnotesize}, % use font and smaller size
showstringspaces=false, % do not emphasize spaces in strings
tabsize=4, % number of spaces of a TAB
mathescape=true,escapechar=§, % escape to latex with §...§
upquote=true, % upright quotes
aboveskip={1.5\baselineskip}, % a bit of space above
columns=fixed, % nice spacing
%
% the following is for replacing some matlab relations like >= or ~=
% by the corresponding LaTeX symbols, which are much easier to read ...
% literate=%
% {~}{{$\neg$}}1 % \neg
% {<=}{{\tiny$\leq$}}1 % \leq
% {>=}{{\tiny$\geq$}}1 % \geq
% {~=}{{\tiny$\neq$}}1 % \neq
% {delta}{{\tiny$\Delta$}}1% \Delta
}

\ifnumbered% numbered option
\lstset{%
numbersep=3mm, numbers=left, numberstyle=\tiny, % number style
}
\fi

\ifframed% framed option
\lstset{%
frame=single, % frame
}
\ifnumbered%
\lstset{%
framexleftmargin=6mm, xleftmargin=6mm % tweak margins
}
\fi
\fi

\endinput
%% End of file `seqcode.sty'.

0 comments on commit 4bd1b28

Please sign in to comment.