Skip to Main Content Skip to Search
Login
File Exchange
MATLAB Newsgroup
Link Exchange
  Blogs  
 Contest 
MathWorks.com

Thread Subject: Publish to latex with syntax highlighting

Subject: Publish to latex with syntax highlighting

From: Kelly

Date: 01 May, 2007 16:02:08

Message: 1 of 3

When I publish a document to html, the blocks of code in the final
document use the colored syntax highlighting corresponding to the
Matlab editor, and are also surrounded by a light gray box. However,
when I publish to Latex, the code remains in black and is not offset
from the rest of the text, making it a little more difficult to
distinguish descriptive text from the code in the final document.

Is there a way to add syntax highlighting to the final Latex
document? There is a small section in the mxdom2latex.xsl file that
seems to have this aim (lines 162 - 180). However, I don't knw much
about Latex coding beyond the very basics, so I may be
misunderstanding it.

For the record, I'm running R2006b beta for Intel Macs on a MacOS X
system.

Thanks,
Kelly

Subject: Re: Publish to latex with syntax highlighting

From: Doug Schwarz

Date: 01 May, 2007 21:28:52

Message: 2 of 3

In article <ef558a9.-1@webcrossing.raydaftYaTP>,
 Kelly <kakearney@nospamgmail.com> wrote:

> When I publish a document to html, the blocks of code in the final
> document use the colored syntax highlighting corresponding to the
> Matlab editor, and are also surrounded by a light gray box. However,
> when I publish to Latex, the code remains in black and is not offset
> from the rest of the text, making it a little more difficult to
> distinguish descriptive text from the code in the final document.
>
> Is there a way to add syntax highlighting to the final Latex
> document? There is a small section in the mxdom2latex.xsl file that
> seems to have this aim (lines 162 - 180). However, I don't knw much
> about Latex coding beyond the very basics, so I may be
> misunderstanding it.
>
> For the record, I'm running R2006b beta for Intel Macs on a MacOS X
> system.
>
> Thanks,
> Kelly

You might want to try the listings package. Here's an example:

-------------------- matlab_listings.tex ----------------------------
\documentclass{article}
\usepackage[margin=0.75in]{geometry}
\usepackage{courier}
\usepackage{color}
\usepackage{listings}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}

\begin{document}

\lstset{language=Matlab,
   keywords={break,case,catch,continue,else,elseif,end,for,function,
      global,if,otherwise,persistent,return,switch,try,while},
   basicstyle=\ttfamily,
   keywordstyle=\color{blue},
   commentstyle=\color{red},
   stringstyle=\color{dkgreen},
   numbers=left,
   numberstyle=\tiny\color{gray},
   stepnumber=1,
   numbersep=10pt,
   backgroundcolor=\color{white},
   tabsize=4,
   showspaces=false,
   showstringspaces=false}

\begin{lstlisting}
function y = demo(x) % This is a comment.
   str = 'hello there';
   y = x + 1;
end
\end{lstlisting}

\end{document}
-----------------------------------------------------------------------

--
Doug Schwarz
dmschwarz&ieee,org
Make obvious changes to get real email address.

Subject: Re: Publish to latex with syntax highlighting

From: Michael Wild

Date: 02 May, 2007 10:32:38

Message: 3 of 3

Doug Schwarz wrote:
> In article <ef558a9.-1@webcrossing.raydaftYaTP>,
> Kelly <kakearney@nospamgmail.com> wrote:
>
>> When I publish a document to html, the blocks of code in the final
>> document use the colored syntax highlighting corresponding to the
>> Matlab editor, and are also surrounded by a light gray box. However,
>> when I publish to Latex, the code remains in black and is not offset
>> from the rest of the text, making it a little more difficult to
>> distinguish descriptive text from the code in the final document.
>>
>> Is there a way to add syntax highlighting to the final Latex
>> document? There is a small section in the mxdom2latex.xsl file that
>> seems to have this aim (lines 162 - 180). However, I don't knw much
>> about Latex coding beyond the very basics, so I may be
>> misunderstanding it.
>>
>> For the record, I'm running R2006b beta for Intel Macs on a MacOS X
>> system.
>>
>> Thanks,
>> Kelly
>
> You might want to try the listings package. Here's an example:
>
> -------------------- matlab_listings.tex ----------------------------
> \documentclass{article}
> \usepackage[margin=0.75in]{geometry}
> \usepackage{courier}
> \usepackage{color}
> \usepackage{listings}
>
> \definecolor{dkgreen}{rgb}{0,0.6,0}
> \definecolor{gray}{rgb}{0.5,0.5,0.5}
>
> \begin{document}
>
> \lstset{language=Matlab,
> keywords={break,case,catch,continue,else,elseif,end,for,function,
> global,if,otherwise,persistent,return,switch,try,while},
> basicstyle=\ttfamily,
> keywordstyle=\color{blue},
> commentstyle=\color{red},
> stringstyle=\color{dkgreen},
> numbers=left,
> numberstyle=\tiny\color{gray},
> stepnumber=1,
> numbersep=10pt,
> backgroundcolor=\color{white},
> tabsize=4,
> showspaces=false,
> showstringspaces=false}
>
> \begin{lstlisting}
> function y = demo(x) % This is a comment.
> str = 'hello there';
> y = x + 1;
> end
> \end{lstlisting}
>
> \end{document}
> -----------------------------------------------------------------------
>

i created once a customized style sheet for my own use which made use of
the listings package. however, it is nowhere near finished or perfect.
however, editing is pretty straight forward if you have read the most
basic tutorial on xsl. to use it just copy that stuff into some file
ending on .xsl and use it for publishing. below goes the code (i hope it
doesn't get truncated):

<?xml version="1.0" encoding="utf-8"?>

<!--
This is an XSL stylesheet which converts mscript XML files into XSLT.
Use the XSLT command to perform the conversion.

Ned Gulley and Matthew Simoneau, September 2003
Copyright 1984-2006 The MathWorks, Inc.
$Revision: 1.1.6.4 $ $Date: 2006/06/27 23:02:42 $

Adapted by Michael Wild for more latex-like output.
-->

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
<xsl:stylesheet
   version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:escape="http://www.mathworks.com/namespace/latex/escape"
 
xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd">
   <xsl:output method="text" indent="no"/>

<xsl:template match="mscript">
% This LaTeX was auto-generated from an M-file by MATLAB.
% To make changes, update the M-file and republish this document.

\documentclass[11pt]{article}
\usepackage{geometry}
\geometry{a4paper}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{epstopdf}
\DeclareGraphicsRule{.tif}{png}{.png}{`convert #1 `dirname #1`/`basename
#1 .tif`.png}

\usepackage{hyperref}
\usepackage[usenames,dvipsnames]{color}
\definecolor{lightgray}{gray}{0.5}
\definecolor{darkgray}{gray}{0.3}

\usepackage{pdfcolmk}

\usepackage{listings}
\lstset{
   language=Matlab,
   basicstyle=\small\ttfamily,
   keywordstyle=,
   showstringspaces=false,
   commentstyle=\color{darkgray}}


     <!-- Determine if the there should be an introduction section. -->
     <xsl:variable name="hasIntro" select="count(cell[@style =
'overview'])"/>
     <xsl:if test = "$hasIntro">
\title{<xsl:apply-templates select="cell[1]/steptitle"/>\\
{\large <xsl:apply-templates select="cell[1]/text"/>}}
</xsl:if>

\begin{document}
   \maketitle

     <xsl:variable name="body-cells" select="cell[not(@style =
'overview')]"/>

     <!-- Include contents if there are titles for any subsections. -->
     <xsl:if test="count(cell/steptitle[not(@style = 'document')])">
   \tableofcontents
     </xsl:if>

     <!-- Loop over each cell -->
     <xsl:for-each select="$body-cells">
         <!-- Title of cell -->
         <xsl:if test="steptitle">
           <xsl:variable name="headinglevel">
             <xsl:choose>
               <xsl:when test="steptitle[@style =
'document']">section</xsl:when>
               <xsl:otherwise>section</xsl:otherwise>
             </xsl:choose>
           </xsl:variable>

\<xsl:value-of select="$headinglevel"/>{<xsl:apply-templates
select="steptitle"/>}

</xsl:if>

         <!-- Contents of each cell -->
         <xsl:apply-templates select="text"/>
         <xsl:apply-templates select="mcode"/>
         <xsl:apply-templates select="mcodeoutput"/>
         <xsl:apply-templates select="img"/>
% end of cell

     </xsl:for-each>


<xsl:if test="copyright">
\begin{par} \footnotesize \color{lightgray} \begin{flushright}
\emph{<xsl:apply-templates select="copyright"/>}
\end{flushright} \color{black} \normalsize \end{par}
</xsl:if>


\end{document}

</xsl:template>



<!-- HTML Tags in text sections -->
<xsl:template match="p">

<xsl:apply-templates/><xsl:text></xsl:text>
</xsl:template>

<xsl:template match="ul">\begin{itemize}
<xsl:apply-templates/>\end{itemize}
</xsl:template>
<xsl:template match="li"> \item <xsl:apply-templates/><xsl:text>
</xsl:text></xsl:template>
<xsl:template match="pre">
   <xsl:choose>
     <xsl:when test="@class='error'">
\begin{verbatim}<xsl:value-of select="."/>\end{verbatim}
     </xsl:when>
     <xsl:otherwise>
\begin{verbatim}<xsl:value-of select="."/>\end{verbatim}
     </xsl:otherwise>
   </xsl:choose>
</xsl:template>
<xsl:template match="b">\textbf{<xsl:apply-templates/>}</xsl:template>
<xsl:template match="tt">\texttt{<xsl:apply-templates/>}</xsl:template>
<xsl:template match="i">\textit{<xsl:apply-templates/>}</xsl:template>
<xsl:template match="a">\begin{verbatim}<xsl:value-of
select="."/>\end{verbatim}</xsl:template>

<xsl:template match="text()">
   <!-- Escape special characters in text -->
   <xsl:call-template name="replace">
     <xsl:with-param name="string" select="."/>
   </xsl:call-template>
</xsl:template>

<xsl:template match="equation">
<xsl:value-of select="."/>
</xsl:template>


<!-- Code input and output -->

<xsl:template match="mcode">\begin{lstlisting}
<xsl:value-of select="."/>
\end{lstlisting}
</xsl:template>

<xsl:template match="mcodeoutput">
   {\color{lightgray} \small\begin{verbatim}<xsl:value-of
select="."/>\end{verbatim} }
</xsl:template>


<!-- Figure and model snapshots -->

<xsl:template match="img">
\includegraphics [width=4in]{<xsl:value-of select="@src"/>}
</xsl:template>

<!-- Colors for syntax-highlighted input code -->

<xsl:template
match="mwsh:code">\begin{verbatim}<xsl:apply-templates/>\end{verbatim}
</xsl:template>
<xsl:template match="mwsh:keywords">
   <span class="keyword"><xsl:value-of select="."/></span>
</xsl:template>
<xsl:template match="mwsh:strings">
   <span class="string"><xsl:value-of select="."/></span>
</xsl:template>
<xsl:template match="mwsh:comments">
   <span class="comment"><xsl:value-of select="."/></span>
</xsl:template>
<xsl:template match="mwsh:unterminated_strings">
   <span class="untermstring"><xsl:value-of select="."/></span>
</xsl:template>
<xsl:template match="mwsh:system_commands">
   <span class="syscmd"><xsl:value-of select="."/></span>
</xsl:template>


<!-- Used to escape special characters in the LaTeX output. -->

<escape:replacements>
   <!-- special TeX characters -->
   <replace><from>$</from><to>\$</to></replace>
   <replace><from>&</from><to>\&</to></replace>
   <replace><from>%</from><to>\%</to></replace>
   <replace><from>#</from><to>\#</to></replace>
   <replace><from>_</from><to>\_</to></replace>
   <replace><from>{</from><to>\{</to></replace>
   <replace><from>}</from><to>\}</to></replace>
   <!-- mainly in code -->
   <replace><from>~</from><to>\ensuremath{\tilde{\;}}</to></replace>
   <replace><from>^</from><to>\^{}</to></replace>
   <replace><from>\</from><to>\ensuremath{\backslash}</to></replace>
   <!-- mainly in math -->
   <replace><from>|</from><to>\ensuremath{|}</to></replace>
   <replace><from><</from><to>\ensuremath{<}</to></replace>
   <replace><from>></from><to>\ensuremath{>}</to></replace>
</escape:replacements>

<xsl:variable name="replacements"
select="document('')/xsl:stylesheet/escape:replacements/replace"/>

<xsl:template name="replace">
   <xsl:param name="string"/>
   <xsl:param name="next" select="1"/>

   <xsl:variable name="count" select="count($replacements)"/>
   <xsl:variable name="first" select="$replacements[$next]"/>
   <xsl:choose>
     <xsl:when test="$next > $count">
       <xsl:value-of select="$string"/>
     </xsl:when>
     <xsl:when test="contains($string, $first/from)">
       <xsl:call-template name="replace">
         <xsl:with-param name="string"
                         select="substring-before($string, $first/from)"/>
         <xsl:with-param name="next" select="$next+1" />
       </xsl:call-template>
       <xsl:copy-of select="$first/to" />
       <xsl:call-template name="replace">
         <xsl:with-param name="string"
                         select="substring-after($string, $first/from)"/>
         <xsl:with-param name="next" select="$next"/>
       </xsl:call-template>
     </xsl:when>
     <xsl:otherwise>
       <xsl:call-template name="replace">
         <xsl:with-param name="string" select="$string"/>
         <xsl:with-param name="next" select="$next+1"/>
       </xsl:call-template>
     </xsl:otherwise>
   </xsl:choose>
</xsl:template>

</xsl:stylesheet>

Tags for this Thread

Everyone's Tags:

Add a New Tag:

Separated by commas
Ex.: root locus, bode

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Tag Activity for This Thread
Tag Applied By Date/Time
publish Matthew Simoneau 14 Aug, 2007 16:58:27
latex Matthew Simoneau 14 Aug, 2007 16:58:27
rssFeed for this Thread

envelope graphic E-mail this page to a colleague

Public Submission Policy
NOTICE: Any content you submit to MATLAB Central, including personal information, is not subject to the protections which may be afforded information collected under other sections of The MathWorks, Inc. Web site. You are entirely responsible for all content that you upload, post, e-mail, transmit or otherwise make available via MATLAB Central. The MathWorks does not control the content posted by visitors to MATLAB Central and, does not guarantee the accuracy, integrity, or quality of such content. Under no circumstances will The MathWorks be liable in any way for any content not authored by The MathWorks, or any loss or damage of any kind incurred as a result of the use of any content posted, e-mailed, transmitted or otherwise made available via MATLAB Central. Read the complete Disclaimer prior to use.
Related Topics