SQL 中包含样式注释的列表--
看起来像是−−
从 PDF 粘贴的(如果lmodern
使用,则为??
)。我查看了这些答案,但不知道如何将它们与列表一起使用(我主要从外部文件加载(如果这很重要):如何防止 LaTeX 创建 en-dash 和 em-dash?
\documentclass[11pt,letterpaper]{memoir}
\usepackage{lmodern}
\usepackage{listings}
\lstloadlanguages{SQL}
\lstset {
frameround=fttt
,language=SQL
,numbers=left
,breaklines=true
,showstringspaces=false
,columns=flexible
,keepspaces=true
}
\begin{document}
\begin{lstlisting}
select 1
-- This is just a comment
select 2
\end{lstlisting}
\end{document}
从 PDF 粘贴后,结果在 Sql Studio 中显示如下(第三行是它们应有的样子):
编辑:
我尝试使用listings 包将连字符改为减号并且它对于常见的 SQL 注释行(例如-- This is a comment
:)工作得很好,但它对输出列表有副作用,其中字段名称与数据之间用包含多个破折号的行分隔:
field1
--------------
1.33333333
它们在前两个破折号后有一个额外的空格,如下所示:
实施了链接建议的 MWE:
\documentclass[11pt,letterpaper]{memoir}
\usepackage{listings}
\makeatletter
\lst@CCPutMacro\lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{-{}}}
\@empty\z@\@empty
\makeatother
\lstset {
frameround=fttt
,language=SQL
,breaklines=true
,columns=flexible
}
\begin{document}
\begin{lstlisting}[caption={extra spaces},label={lst:sp},nolol=true,numbers=none]
field1
--------------
1.3333333
field1 field2
--------- --------------
9.66667 9.66667
\end{lstlisting}
\end{document}
答案1
间距不均匀的问题根源在于columns=flexible
选项:使用此选项,listings 会尝试在每个输入“块”后重新插入缺失的空格,在您的情况下,--
由于注释定义,它们由一个块组成,因此在两个输入“块”后重新插入缺失的空格。由于连字符比默认列宽 0.45em 略小,因此您会得到一个空格。
有多种方法可以解决这个问题:
使灵活列的默认宽度更小:
\begin{lstlisting}[caption={extra spaces},label={lst:sp},nolol=true,numbers=none,%
basewidth={0.6em,0.37em}
]
使连字符变大一些:
\lst@CCPutMacro\lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{{\Large-}{}}}
\@empty\z@\@empty
或者将其放入更大的盒子中:
\lst@CCPutMacro\lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{\makebox[0.45em]{-}{}}}
\@empty\z@\@empty