%% Requires packages %% ifthen %% %% Configure before use, using: %% hslSetRenderer{yourrenderer} (invoked for each line, should produce nr) %% %% You can also invoke the current renderer via: %% hslInsertLine %% %% The default renderer uses the marginnote package. \makeatletter \newcounter{hsl@@lineCounter} \setcounter{hsl@@lineCounter}{1} \newcounter{hsl@@columnCounter} \setcounter{hsl@@columnCounter}{0} \newcommand\hsl@@renderer[0]{\hsl@@defaultRenderer} \newcommand\hsl@@defaultRenderer[0]{\hslLeftNote{\ttfamily\scriptsize{}\hfill\arabic{hsl@@lineCounter}\stepcounter{hsl@@lineCounter}}} \newcommand\hslLeftNote[1]{\ifthenelse{\isodd{\thepage}}{\reversemarginpar\marginnote{#1}\reversemarginpar}{\marginnote{#1}}} \newcommand\hslLineMark[0]{\ifthenelse{\equal{\value{hsl@@columnCounter}}{0}}{\hslInsertLine\stepcounter{hsl@@columnCounter}}{}} \newcommand\hslNewLine[0]{\setcounter{hsl@@columnCounter}{0}} \newcommand\hslInsertLine[0]{\hsl@@renderer{}} \newcommand\hslSetRenderer[1]{\renewcommand\hsl@@renderer[0]{#1}} \makeatother %subst fromto b e t = "\>[" b "]{}\hslLineMark{}" t "{}\<[" e "]%'n" %subst newline = "\hslNewLine{}\\'n" %subst blankline = "\hslNewLine{}\\[\blanklineskip]%'n" %subst code a = "\begin{hscode}\hslNewLine\SaveRestoreHook'n" a "\ColumnHook'n\end{hscode}\resethooks'n"