class
lstlistings を使用して Python コードをフォーマットし、関数とクラスの定義 (つまり、または という単語に続くもの) を太字にしたいと思いますdef
。ただし、関数が呼び出されるときに太字にすべきではないため、キーワードを個別に定義したくありません。
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}
これにより
MyClass
(次のキーワードclass
) と__init__
(次の)の最初のインスタンスを太字にしたいのですdef
が、MyClass の 2 番目のインスタンスは示されているとおりにする必要があります。どうすればよいでしょうか?
キーワードと : または ( の間の単語のみが太字になることに注意してください。
編集: 追加してみました
\lstset{moredelim=[s][\bfseries]{class }{:},
moredelim=[s][\bfseries]{def }{(},}
運が悪かった
答え1
オプション引数で言語を再読み込みしないでください。これにより、設定の一部が上書きされます。2 番目の例を参照してください。
次のように試すこともできますが、コロンも太字で印刷されることに注意してください。私見では、これを避けるのはかなり難しいでしょう。
\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}