Listings-Problem mit Anführungszeichen in einer Zeichenfolge

Listings-Problem mit Anführungszeichen in einer Zeichenfolge

Ein einfaches Anführungszeichen innerhalb einer listingsZeichenfolge wird anscheinend als Ende der Zeichenfolge interpretiert. Gibt es eine Möglichkeit, dies zu verhindern?

\documentclass[12pt]{article}
\usepackage[top=0.3in, bottom=1.2in, left=0.8in, right=0.8in]{geometry}

\setlength{\parindent}{0cm}

\usepackage[english]{babel}

\usepackage{listings}

\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}

\begin{document}

\lstset{language=Matlab,
        basicstyle=\ttfamily,
        keywordstyle=\color{Blue}\ttfamily,
        stringstyle=\color{Red}\ttfamily,
        commentstyle=\color{Emerald}\ttfamily,
        morecomment=[l][\color{Magenta}]{\#},
        breaklines=true,
        breakindent=0pt,
        breakatwhitespace,
        columns=fullflexible,
        showstringspaces=false
}


\begin{lstlisting}
a=1;
if a==1
    disp('Is 1')
elseif a==2
    disp('Is 2')
else
    disp('I don't know')
end
\end{lstlisting}

\end{document}

Bildbeschreibung hier eingeben

Antwort1

Da einfache Anführungszeichen in Matlab als String-Trennzeichen verwendet werden, müssen Sie dieses Zeichen maskieren, um es in den String aufzunehmen. Dies erreichen Sie, indem Sie zwei einfache Anführungszeichen hintereinander eingeben:

disp('I don''t know')

Die Matlabvon definierte Sprache listingsist intelligent genug, um das Richtige zu setzen, in diesem Fall:

Bildbeschreibung hier eingeben

Als Randbemerkung: Vielleicht interessiert Sie auch diematlab-prettifierPaket; siehediese Antwort.

Antwort2

Eine mögliche Lösung vonAuflistungen.pdfmit mathescapeParameter:

\documentclass[12pt]{article}
\usepackage[top=0.3in, bottom=1.2in, left=0.8in, right=0.8in]{geometry}

\setlength{\parindent}{0cm}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}

\usepackage{listings}




\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}

\begin{document}

\lstset{language=Matlab,
        basicstyle=\ttfamily,
        keywordstyle=\color{Blue}\ttfamily,
        stringstyle=\color{Red}\ttfamily,
        commentstyle=\color{Emerald}\ttfamily,
        morecomment=[l][\color{Magenta}]{\#},
        breaklines=true,
        breakindent=0pt,
        breakatwhitespace,
        columns=fullflexible,
        showstringspaces=false
}


\begin{lstlisting}[mathescape]
a=1;
if a==1
    disp('Is 1')
elseif a==2
    disp('Is 2')
else
    disp('I don$\texttt{\color{red}'}$t know')
end
\end{lstlisting}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen