Я пытаюсь включить код MatLab в свой документ с помощью пакета listings, но, похоже, строки интерпретируются неправильно.
fprintf('ABC %s:\n', mystring);
fprintf("ABC %s:\n", mystring);
\documentclass{article}
\usepackage[english]{babel} %use english or ngerman
\usepackage[utf8]{inputenc} %German äöü for input
\usepackage[T1]{fontenc} %German äöü for pdf
\usepackage{textcomp} %Additional Symbols e.g. degree
\usepackage{xcolor}
\usepackage{listings}
\definecolor{keyword}{RGB}{0,175,203} %color
\definecolor{comment}{rgb}{0.06,0.58,0.07} %color
\definecolor{label}{rgb}{0.5,0.5,0.5} %color
\lstset{ %Configure code
keywordstyle=\bfseries\color{keyword},
stringstyle=\ttfamily\color{label},
commentstyle=\color{comment}
}
\begin{document}
\begin{lstlisting}[
language=MatLab,
label=lst:broken,
caption={Broken Syntax Highlighting}
]
fprintf('ABC %s:\n', mystring);
fprintf("ABC %s:\n", mystring);
\end{lstlisting}
\end{document}
Результат:
Можно ли что-то добавить "
в тот же список, что '
и есть?
решение1
Определение языка Matlab определяет только '
как разделитель строк по умолчанию. Но вы также можете сделать "
его, добавив следующую строку в параметры листинга:
morestring=[m]"
m
— это специальный тип разделителя для кода Matlab, определяемый как
[...] специальный тип для Ada и Matlab и, возможно, других языков, где разделители строк также используются для других целей. Он эквивалентен
d
, за исключением того, что строка не начинается после буквы, открывающей скобки, открывающей квадратной скобки или некоторых других символов.
Если вам не нужно такое особое поведение, используйте morestring=[d]"
.
Вы также можете определить новый язык, основанный на Matlab, с добавлением нового типа строки:
\lstdefinelanguage{MyMatlab}{
language=Matlab,
morestring=[m]"
}
Использование этого нового языка в вашем листинге дает желаемый результат: