-
Notifications
You must be signed in to change notification settings - Fork 0
/
mcode.sty
187 lines (167 loc) · 5.78 KB
/
mcode.sty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
%% This is file `mcode.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 \mcode{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]{mcode}
%% 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 \mcode command and [final] option
%% 1.0 -- Release
\def\fileversion{1.2}
\def\filedate{2005/11/17}
\typeout{Package: `mcode' \fileversion\space <\filedate>}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mcode}[\filedate\space\fileversion]
% for bw-option
\newif\ifbw
\DeclareOption{bw}{\bwtrue}
\ifbw\typeout{mcode: settings optimized for printing!}
\else\typeout{mcode: 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{mcode}{Unknown option `\CurrentOption' !}%
}
\ProcessOptions
% with this command, you can typeset syntax highlighted mcode ``inline'',
% for example when you talk about \mcode{for}--loops ...
\newcommand{\mcode}[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={% % keywords
break,case,catch,continue,elseif,else,end,for,function,global,%
if,otherwise,persistent,return,switch,try,while,...},%
comment=[l]\%,% % comments
morecomment=[l]...,% % comments
morestring=[m]',% % strings
}[keywords,comments,strings]%
\ifbw % use font formating and gray 'colors'
\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 : )
\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
aboveskip={1.\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
{~}{{$\sim$}}1 % \neg
{<=}{{\tiny$\leq$}}1 % \leq
{>=}{{\tiny$\geq$}}1 % \geq
% {~=}{{\tiny$\neq$}}1 % \neq
{~=}{$\sim=$}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 `mcode.sty'.