我正在使用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}
出现了一个垃圾字符,而不是空格。我已将其标记为红色。例如在“Cannot”和“parse”之间、在“parse”和“Postgres”之间。
标题触及线条/框架 - 如何在标题和线条/框架之间留出一些空间
提前致谢
答案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}
我添加了\ttfamily
和basicstyle
,columns=fullflexible
因为我无法忍受以不均匀的方式排列字母间距的普通文本字体列表。
答案2
这是因为 Java 语言
listings
具有morestring=[b]",%
(可以在文件中找到
lstlang1.sty
)为了避免这种情况,您可以使用deletestring
,如下所示:deletestring=[b]",
由于语言还设置
morestring=[b]',%
你也可能对此有兴趣
deletestring=[b]',%
避免出现跟单引号同样的现象。
我无法在下面的例子中重现这一点;图片中标题的位置表明你没有使用标准类之一,因此请编辑你的问题,添加一个简单的,但完全的文档(就像我下面的答案中的文档)允许我们重现带有标题的问题。
代码:
\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}
结果: