Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I am using package listings to import my Python source code into my LaTeX document. I use the command \lstinputlistings. I have a Python source like

class MyClass(Yourclass):
    def __init__(self, myvar, yours):
        bla bla bla...

What should I write in my \lstset command in order to enlight words MyClass, init etc.? I wouldn't want to write any word I want to be highlighted. I tried using moredelims=[s][\color{teal}]{class}{(} inside lstset but it doesn't work.

And why is morekeywords={...} not working with lstinputlistings. It does with lstlistings environment, but doesn't with input from a source file.

share|improve this question
1  
Welcome to TeX.sx! Usually, we don't put a greeting or a "thank you" in our posts. While this might seem strange at first, it is not a sign of lack of politeness, but rather part of our trying to keep everything very concise. Upvoting is the preferred way here to say "thank you" to users who helped you. –  Kurt Nov 21 '12 at 16:38
    
There is no moredelims option. Will \lstset{language=Python,morekeywords={as,init}, moredelim=*[s][\color{teal}]{M‌​yClass}{)}, moredelim=*[s][\color{teal}]{__}{)}} work for you? If you provide a minimal working example (MWE) and perhaps post your output or clarify what you are trying to achieve, then you may get better help. –  hpesoj626 Nov 22 '12 at 2:30
add comment

2 Answers

It is always good to post a minimal and compilable example, not just code snippets. This way, the answerers do not have to guess what's happening with your problem.

I guess that you are looking for something like this.

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\lstset{language=Python,
        morekeywords={as,__init__,MyClass},
        keywordstyle=\color{teal}\bfseries,
        }
\begin{document}
\lstinputlisting{guess.py}
\end{document}

where guess.py is your sample code snippet. I just added as on the last line to show that morekeywords works.

class MyClass(Yourclass):
    def __init__(self, myvar, yours):
        bla bla bla... as

Here is the output.

enter image description here

You can also remove __init__ from morekeywords option and use the answers in How to I emphazise all words beginning with ` in an lstlisting and Listings language definition keyword suffixes. So you may put the following code snippet into your preamble.

\lstset{language=Python,
    morekeywords={as,MyClass},
        keywordstyle=\color{teal}\bfseries,
        keywordsprefix=_,
        }

Let me know if this works for you.

share|improve this answer
    
It does work, thank you. Anyway I was looking for a solution which is not depending on single words I write into my keywords...I found the best the solution in another discussion: package minted –  fmonegaglia Nov 26 '12 at 17:40
add comment

To sidestep your listinputlistings issue, you can always place do

\begin{lstlisting}
\input{yoursource}
\end{lstlisting}

or do a command like so:

\newcommand{\Source}[1]{\begin{lstlisting}\input{#1}\end{lstlisting}}

As far as adding more keywords, I mucked around with it a while ago and came up with

\lstset{emph={Keyword1, Keyword2, Etc}, emphstyle={\bf}}

I am not sure if this allows you to change the colors, however.

share|improve this answer
    
I already tried using emph but not without issues, for example the word as is not recognized by listings. If you try setting in emph, you will have as highlighted in all of your comments and even in the word clASs...anyway the input command seems to work, I haven't actually thought about that before. –  fmonegaglia Nov 21 '12 at 18:15
    
Well, that's silly. I'll keep looking for a real solution. –  Sean Allred Nov 21 '12 at 18:22
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.