【问题标题】:How to use lstlisting package with regular expressions / special chars?如何使用带有正则表达式/特殊字符的 lstlisting 包?
【发布时间】:2020-04-19 22:57:23
【问题描述】:

我想使用 lstlisting 包在代码 sn-p 中显示一个带有正则表达式的 php 函数。 TeX 给了我几个错误“Package inputenc Error: Invalid UTF-8 byte sequence”并且美元符号似乎将我的 tex 代码置于数学模式。整个文档采用 UTF-8 编码。任何想法如何在 lstlisting 环境中正确处理这些特殊字符?谢谢。

\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}

【问题讨论】:

    标签: regex latex listings


    【解决方案1】:

    问题在于加减号和节符号。您可以添加将它们指定为识字:

    \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}
    

    【讨论】:

    • 谢谢,大部分错误都消失了,但还剩下 2 个:'无效的 UTF-8 字节序列'和'无效的 UTF-8 字节“9F'。此外,美元字符仍然把我的 tex数学模式下的代码。
    • @Rome 我的答案中的代码编译没有错误。如果您仍然遇到错误,请发送[mre] 以重现它们
    • 好的,所以我的代码中的其他内容一定是问题所在。如果我自己找不到它们,我会回复你。再次感谢。
    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多