Schriftart nach Stichwortlisten formatieren

Schriftart nach Stichwortlisten formatieren

Ich möchte Python-Code mit Listenlisten formatieren und Funktions- und Klassendefinitionen fett formatieren, also alles, was auf das Wort classoder folgt def. Ich möchte die Schlüsselwörter jedoch nicht einzeln definieren, da sie beim Aufrufen der Funktionen nicht fett formatiert sein sollten.

MWE:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[lighttt]{lmodern} % bold and italic ttfamily
\usepackage{color}
\usepackage{listings}
\usepackage{setspace}

\definecolor{Code}{rgb}{0.1,0.1,0.1}
\definecolor{Decorators}{rgb}{0.7,0,0.7}
\definecolor{Numbers}{rgb}{0.5,0,0}
\definecolor{MatchingBrackets}{rgb}{0.25,0.5,0.5}
\definecolor{Keywords}{rgb}{0,0,1}
\definecolor{self}{rgb}{.87,.46,0}
\definecolor{Strings}{rgb}{0,0.66,0}
\definecolor{Comments}{rgb}{0.388,0.4705,0.518}
\definecolor{Backquotes}{rgb}{0,0,0}
\definecolor{Classname}{rgb}{0,0,0}
\definecolor{FunctionName}{rgb}{0,0,0}
\definecolor{Operators}{rgb}{0,0,0}
\definecolor{Background}{rgb}{0.99,0.99,0.99}

\lstset{
language=Python,
numbers=left,
numberstyle=\footnotesize,
numbersep=1em,
xleftmargin=3em,
linewidth=23cm,
framextopmargin=1em,
framexbottommargin=1em,
showspaces=false,
showtabs=false,
showstringspaces=false,
frame=l,
tabsize=4,
% Basic
basicstyle=\ttfamily\small,
backgroundcolor=\color{Background},
% Comments
commentstyle=\color{Comments}\slshape,
% Strings
stringstyle=\color{Strings},
morecomment=[s][\color{Strings}]{"""}{"""},
morecomment=[s][\color{Strings}]{'''}{'''},
% keywords
keywordstyle={\color{Keywords}\bfseries},
% additional keywords
keywordstyle={[2]\color{Decorators}},
emph={self},
emphstyle={\color{self}\slshape},
}% 




\begin{document}
\lstset{language=Python, breaklines=true}
\begin{lstlisting}
    class MyClass:
        def __init__(self):
            print('do a thing')

    foo = MyClass()
\end{lstlisting}

\end{document}

Dadurch entsteht

Bildbeschreibung hier eingeben

Ich möchte, dass die erste Instanz von MyClass(folgendes Schlüsselwort class) und __init__(folgendes def) fett dargestellt wird, aber die zweite Instanz von MyClass sollte wie gezeigt aussehen. Wie kann ich das erreichen?

Beachten Sie, dass nur das Wort zwischen dem Schlüsselwort und dem : oder dem ( fett sein sollte.

EDIT: Ich habe versucht hinzuzufügen

\lstset{moredelim=[s][\bfseries]{class }{:},
    moredelim=[s][\bfseries]{def }{(},}

ohne Glück

Antwort1

Sie sollten die Sprache im optionalen Argument nicht neu laden. Dadurch werden einige Ihrer Einstellungen überschrieben, siehe zweites Beispiel.

Sie können Folgendes versuchen, aber seien Sie sich bewusst, dass dadurch auch der Doppelpunkt fett gedruckt wird. Meiner Meinung nach wäre es ziemlich schwierig, dies zu vermeiden.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[lighttt]{lmodern} % bold and italic ttfamily
\usepackage{color}
\usepackage{listings}
\usepackage{setspace}

\definecolor{Code}{rgb}{0.1,0.1,0.1}
\definecolor{Decorators}{rgb}{0.7,0,0.7}
\definecolor{Numbers}{rgb}{0.5,0,0}
\definecolor{MatchingBrackets}{rgb}{0.25,0.5,0.5}
\definecolor{Keywords}{rgb}{0,0,1}
\definecolor{self}{rgb}{.87,.46,0}
\definecolor{Strings}{rgb}{0,0.66,0}
\definecolor{Comments}{rgb}{0.388,0.4705,0.518}
\definecolor{Backquotes}{rgb}{0,0,0}
\definecolor{Classname}{rgb}{0,0,0}
\definecolor{FunctionName}{rgb}{0,0,0}
\definecolor{Operators}{rgb}{0,0,0}
\definecolor{Background}{rgb}{0.99,0.99,0.99}

\lstdefinestyle{mypython}{
language=Python,
numbers=left,
numberstyle=\footnotesize,
numbersep=1em,
xleftmargin=3em,
linewidth=23cm,
framextopmargin=1em,
framexbottommargin=1em,
showspaces=false,
showtabs=false,
showstringspaces=false,
frame=l,
tabsize=4,
% Basic
basicstyle=\ttfamily\small,
backgroundcolor=\color{Background},
% Comments
commentstyle=\color{Comments}\slshape,
% Strings
stringstyle=\color{Strings},
morecomment=[s][\color{Strings}]{"""}{"""},
morecomment=[s][\color{Strings}]{'''}{'''},
%% keywords
keywordstyle={\color{Keywords}\bfseries},
% additional keywords
keywordstyle={[2]\color{Decorators}},
emph={self},
emphstyle={\color{self}\slshape},
moredelim=**[s][\bfseries]{class }{:},
moredelim=**[s][\bfseries]{def }{:},
moredelim=**[s][\mdseries]{(}{)},
}%




\begin{document}
\begin{lstlisting}[style=mypython]
    class MyClass:
        def __init__(self):
            print('do a thing')

    foo = MyClass()
\end{lstlisting}

%wrong
\begin{lstlisting}[style=mypython,language=Python]
    class MyClass:
        def __init__(self):
            print('do a thing')

    foo = MyClass()
\end{lstlisting}


\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen