我正在使用该listings
包将一些固定宽度的文本对齐到图像下方。字体basicstyle=\ttfamily
外观columns=fixed
漂亮,间距完美。
内部的列对齐存在两个问题lstlisting
:
一小部分文本需要使用不同的颜色(此处为橙色)。此文本与其他文本之间没有空格分隔。显然,其中的转义字符lstlisting
被视为空格,这会打乱中间的对齐。[下图中的 1。]
行与行之间存在轻微的对齐不匹配,并且单词之间的空格数不同。[下图中的 2。]
看看包装文档columns=fullflexible
,我尝试过将和结合起来keepspaces=true
,但没有成功basewidth=0.6em
。如果有任何其他想法,我将不胜感激!
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\begin{document}
\noindent\framebox[7.1cm]{image}
\def\coloro{\color{orange}}
\def\colorb{\color{black}}
\begin{lstlisting}[basicstyle=\ttfamily,escapeinside={(}{)},columns=fixed]
| || || || || || || || |
(\aftergroup\coloro)||||||||||||||||(\aftergroup\colorb)||||||||||||||||
||||||||||||||||||||||||||||||||
|| || || || || || || || || || ||
\end{lstlisting}
\end{document}
答案1
这里有两个问题。首先,不要使用escapeinside
它来突出显示列表的某些部分,而是设置适当的分隔环境:
moredelim=[is][\color{orange}]{(}{)},
这定义了一个由(
和分隔的新环境)
,其中有不可见的分隔符。与此相反,escapeinside
所有排版都在列表的特殊解析环境中完成,而escape
选项会暂时切换回正常的 LaTeX 模式。
另一个问题是由于包中的一个错误,即使在列对齐listings
中,它似乎也会以不同的方式对齐空格标记和其他标记。为了规避这个问题,你可以使用映射到自身的选项:fixed
literate
|
literate={|}{|}1
后续管道字符不会被分组,并且对齐是正确的。
完整示例代码:
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\begin{document}
\noindent\framebox[7.1cm]{image}
\lstset{
basicstyle=\ttfamily,
moredelim=[is][\color{orange}]{(}{)},
columns=fixed,
literate={|}{|}1
}
\begin{lstlisting}
| || || || || || || || |
(||||||||||||||||)||||||||||||||||
||||||||||||||||||||||||||||||||
|| || || || || || || || || || ||
||||||||||||||||
||||||||||||||||
\end{lstlisting}
\end{document}