リスティングでは、キーワードを適用すべきでない場所にキーワードを適用しています

リスティングでは、キーワードを適用すべきでない場所にキーワードを適用しています

私はLaTeXファイル内にPythonコードを実装したい。以下に最小限の例を挙げる。

\documentclass[12pt]{report}

\usepackage{listings}
\usepackage[dvipsnames]{xcolor}

\begin{document}
\newcommand\pythonstyle{\lstset{
language=Python,
basicstyle=\scriptsize,
backgroundcolor=\color{lightgray},
otherkeywords={self,with,as},
keywordstyle=\color{NavyBlue},
commentstyle=\color{OliveGreen},
emph={MyClass,__init__,In,Out},
emphstyle=\color{red}
showstringspaces=false,
}}

{\pythonstyle\begin{lstlisting}
# with my current listing, this is not working as inteded

import pandas as pd

data = pd.DataFrame()
\end{lstlisting}}


\end{document}

次の出力を生成する

Texファイル出力

キーワード スタイルが単語全体にのみ適用され、一部の単語内であっても tex が検出したすべてのケースには適用されないようにするには、どうすればよいですか?

答え1

代替案として:minted必要なものだけを強調表示するのが非常に優れています。

鋳造された例

% arara: pdflatex: {shell: yes}
\documentclass[12pt]{report}

\usepackage{minted}
\usepackage[svgnames]{xcolor}

\usemintedstyle{vs}
\setminted{bgcolor=GhostWhite!90!gray}

\begin{document}

\begin{minted}{python}
# with my current listing, this is not working as inteded

import pandas as pd

data = pd.DataFrame()
\end{minted}


\end{document}

答え2

リストのドキュメントを詳しく調べたところ、間違ったオプションを使用していることが判明しました。そこには、(ソース):

[...]

otherkeywords={〈キーワード〉}

他の文字を含む、または数字で始まるキーワードを定義します。指定された各「キーワード」はキーワード スタイルで印刷されますが、文字の「文字」、「数字」、および「その他」のステータスは変更されません。このキーは、=>、->、-->、--、:: などのキーワードを定義するように設計されています。1 つのキーワードが別のキーワードのサブシーケンスである場合 (-- および --> など)、短い方を最初に指定する必要があります。

[...]

適切なオプションは でしたmorekeywordsmorekeywordsの代わりにを使用するとotherkeywords、問題が解決しました! @Dr.ManuelKuehner、これはあなたにとって興味深いものになるはずです! @TeXnician、代替ソリューションをありがとうございます!

\documentclass[12pt]{report}

\usepackage{listings}
\usepackage[dvipsnames]{xcolor}

\begin{document}
\newcommand\pythonstyle{\lstset{
language=Python,
basicstyle=\scriptsize,
backgroundcolor=\color{lightgray},
morekeywords={self,with,as},
keywordstyle=\color{NavyBlue},
commentstyle=\color{OliveGreen},
emph={MyClass,__init__,In,Out},
emphstyle=\color{red}
showstringspaces=false,
}}

{\pythonstyle\begin{lstlisting}
# with my current listing, this is not working as inteded

import pandas as pd

data = pd.DataFrame()
\end{lstlisting}}


\end{document}

正しい結果

改めて感謝します!

関連情報