Как использовать пакет lstlisting с регулярными выражениями / специальными символами? - PullRequest
1 голос
/ 20 апреля 2020

Я хочу показать функцию php с регулярным выражением в фрагменте кода, используя пакет lstlisting. TeX выдает мне несколько ошибок: « Inputen пакета c Ошибка: неверная последовательность байтов UTF-8 », и знак доллара, похоже, переводит мой текстовый код в математический режим. Весь документ в кодировке UTF-8. Любые идеи, как правильно работать с этими специальными символами в списке? Спасибо.

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings}

\begin{lstlisting}[language=php,label={lis:mylisting}]
public function passes($attribute, $value)
{
  return preg_match("/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[0-9])(?=.*?[#?!@()$%^&*=_{}[\]:;\"'|\\<>,.\/~`±§+-]).{8,255}$/", $value);
}
\end{lstlisting}

1 Ответ

1 голос
/ 20 апреля 2020

Проблема в символе плюс-минус и секции. Вы можете добавить указать их как грамотные:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings}


\begin{document}

\begin{lstlisting}[language=php,label={lis:mylisting},extendedchars=true,literate={±}{{$\pm$}}1 {§}{{\S}}1]
public function passes($attribute, $value)
{
  return preg_match("/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[0-9])(?=.*?[#?!@()$%^&*=_{}[\]:;\"'|\\<>,.\/~`±§+-]).{8,255}$/", $value);
}
\end{lstlisting}
\end{document}
...