列表:将逗号移至左侧,列=灵活

列表:将逗号移至左侧,列=灵活

编译代码

\documentclass{standalone}
\usepackage{newtxtext,newtxmath}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[columns=flexible,mathescape,identifierstyle=\slshape,keywords={SPEC,sort},numbers=left,numberstyle=\tiny,numbersep=5pt]
SPEC SomeSpecification =
{
  sort Sort1, AnotherSort, ThisOneIsOk, AFourthSort

  fun1:        Sort1 $\to$ AnotherSort
  anotherFun:  AnotherSort $\to$ AFourthSort
  thirdFun:    AnotherSort, AFourthSort $\to$ ThisOneIsOk
}
\end{document}

使用 pdflatex 产生输出

输出

如您所见,在第 3 行中,“AnotherSort”与后面的逗号之间的空格比“ThisOneIsOk”与后面的逗号之间的空格大得多。这似乎是一个小问题,但第 3 行中的排序越多,看起来就越糟糕。如何自动将逗号“粘贴”到其前面的单词,同时保持对齐

  • 第 3 行至第 7 行,即第一个单词(“sort”、“fun1”、“anotherFun”和“thirdFun”)应从同一列开始,并且在

  • 第 5 至第 7 行,即冒号后的函数类型(“Sort1”、“AnotherSort”、“AnotherSort”)应从同一列开始

我不想在\begin{lstlisting}[...]和之间更改\end{lstlisting}太多代码,而希望采用集中解决方案(例如,通过某些包选项、某些环境选项或某些宏)。我也不太可能切换到等宽字体:它会占用更多空间。

答案1

摘自手册listings

这三种格式之间的区别在于,完全灵活格式不关心其他任何事情,而普通灵活格式和空间灵活格式则在字符串需要的空间小于“保留”时尝试修复列对齐。普通灵活格式将在空格处、标识符前后以及其他字符序列前后插入补充空间以修复对齐;空间灵活格式只会通过拉伸现有空间来插入补充空间。在上面的灵活示例中,两个 MEN 垂直对齐,因为在第四行插入了一些空间来修复对齐。在完全灵活格式中,两个 MEN 未对齐。

以下是示例

在此处输入图片描述

从描述来看,flexible它正在做它应该做的事情。fullflexible在任何情况下都可以使用,特别是使用可变宽度字体时,进行列对齐是没有意义的。

\documentclass{article}
\usepackage{newtxtext,newtxmath}
\usepackage{listings}

\begin{document}

\begin{lstlisting}[
  columns=fullflexible,
  mathescape,
  identifierstyle=\slshape,
  keywords={SPEC,sort},
  numbers=left,
  numberstyle=\tiny,numbersep=5pt]
SPEC SomeSpecification =
{
  sort Sort1, AnotherSort, ThisOneIsOk, AFourthSort

  fun1:        Sort1 $\to$ AnotherSort
  anotherFun:  AnotherSort $\to$ AFourthSort
  thirdFun:    AnotherSort, AFourthSort $\to$ ThisOneIsOk
}
\end{lstlisting}

\end{document}

在此处输入图片描述

如果您想要保持对齐并且没有“移位标点”,请使用等宽字体;有几种可供选择。

\documentclass{article}
\usepackage{newtxtext,newtxmath}
\usepackage{listings}

\begin{document}

\begin{lstlisting}[
  basicstyle=\ttfamily,
  columns=flexible,
  basewidth={0.5em,0.5em},
  mathescape,
  identifierstyle=\slshape,
  keywords={SPEC,sort},
  numbers=left,
  numberstyle=\tiny,numbersep=5pt]
SPEC SomeSpecification =
{
  sort Sort1, AnotherSort, ThisOneIsOk, AFourthSort

  fun1:        Sort1 $\to$ AnotherSort
  anotherFun:  AnotherSort $\to$ AFourthSort
  thirdFun:    AnotherSort, AFourthSort $\to$ ThisOneIsOk
}
\end{lstlisting}

\end{document}

在此处输入图片描述

结果如下\usepackage{sourcecodepro}

在此处输入图片描述

相关内容