Latex 列表包,标题接触框架和垃圾字符而不是空格的问题

Latex 列表包,标题接触框架和垃圾字符而不是空格的问题

我正在使用listings包并面临两个问题

以下是 LaTeX 代码和输出

\lstset{language=Java, basicstyle=\small, frame=single, breaklines=true, postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookrightarrow\space}}}

\begin{lstlisting}[caption={Utils.java},label={lst:JOOQ-LGRN}] 
CATCH CLAUSE : catch (Exception fatal) {
  log.error("Cannot parse Postgres array: " + rs.getString(index));
  log.error(fatal);
  return null;
}
\end{lstlisting}

问题以红色标记

  1. 出现了一个垃圾字符,而不是空格。我已将其标记为红色。例如在“Cannot”和“parse”之间、在“parse”和“Postgres”之间。

  2. 标题触及线条/框架 - 如何在标题和线条/框架之间留出一些空间

提前致谢

答案1

“显式空间”符号是由于showstringspaces=true的默认设置造成的lstlisting

该类IEEEtran只知道两种类型的标题,即表格标题和图形标题。如果环境不是table,则该类会假定标题是图形标题,因此它会调整间距以将其放置在图片下方。我的建议是使用表格标题的格式,以保持一致性。

\documentclass{IEEEtran}
\usepackage{listings}
\usepackage{etoolbox}

\lstset{
  language=Java, 
  basicstyle=\small\ttfamily,
  columns=fullflexible, 
  frame=single, 
  breaklines=true, 
  postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookrightarrow\space}},
  showstringspaces=false,% no symbol for spaces in strings
}

% Persuade IEEEtran into believing a listing is a table
\makeatletter
\preto\lstlisting{\def\@captype{table}}
\makeatother

\begin{document}

\begin{lstlisting}[caption={Utils.java},label={lst:JOOQ-LGRN}] 
CATCH CLAUSE : catch (Exception fatal) {
  log.error("Cannot parse Postgres array: " + rs.getString(index));
  log.error(fatal);
  return null;
  a test with a single quote 'Cannot parse Postgres array:';
}
\end{lstlisting}

\end{document}

我添加了\ttfamilybasicstylecolumns=fullflexible因为我无法忍受以不均匀的方式排列字母间距的普通文本字体列表。

在此处输入图片描述

答案2

  1. 这是因为 Java 语言listings具有

    morestring=[b]",%
    

    (可以在文件中找到lstlang1.sty)为了避免这种情况,您可以使用deletestring,如下所示:

    deletestring=[b]",
    

    由于语言还设置

    morestring=[b]',%
    

    你也可能对此有兴趣

    deletestring=[b]',%
    

    避免出现跟单引号同样的现象。

  2. 我无法在下面的例子中重现这一点;图片中标题的位置表明你没有使用标准类之一,因此请编辑你的问题,添加一个简单的,但完全的文档(就像我下面的答案中的文档)允许我们重现带有标题的问题。

代码:

\documentclass{article}
\usepackage{listings}

\lstset{
  language=Java, 
  basicstyle=\small, 
  frame=single, 
  breaklines=true, 
  postbreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookrightarrow\space}},
  deletestring=[b]",
  deletestring=[b]'
}

\begin{document}

\begin{lstlisting}[caption={Utils.java},label={lst:JOOQ-LGRN}] 
CATCH CLAUSE : catch (Exception fatal) {
  log.error("Cannot parse Postgres array: " + rs.getString(index));
  log.error(fatal);
  return null;
  a test with a single quote 'Cannot parse Postgres array:';
}
\end{lstlisting}

\end{document}

结果:

在此处输入图片描述

相关内容