我使用名为“lstaddons”的包(創作者,最初的问题)获取列表上的彩色线条背景。
我想将整条线着色到框架上。我缺少的是线宽的动态计算。
您可以调整 linebackgroundsep,将颜色框向左移动。并且可以通过 linebackgroundwidth 设置框的宽度。
我的问题是:是否有机会通过宏来动态计算线宽?我试过这个,但我觉得有点糟糕……
\newdimen\lstwidth
\newdimen\lstxleftmargin
\lstxleftmargin = 15pt
\lstwidth = 0pt
\advance\lstwidth by \linewidth
\advance\lstwidth by -\lstxleftmargin % Minus xleftmargin
\advance\lstwidth by 1pt % Minus Rand rechts
并在列表设置中:
\lstset{
linebackgroundcolor={\ifodd\value{lstnumber}\color{codegray}\fi},
linebackgroundsep=3pt, % lstaddons: fills the line from the left frame
linebackgroundwidth={\lstwidth}, % lstaddons: ... to the right
frame=lr,
numbersep=10pt,
xleftmargin=\lstxleftmargin,
xrightmargin=5pt
}
答案1
我刚刚创建了一个帐户。非常感谢这个非常有用的答案!事实上,解决方案是:linebackgroundwidth={\dimexpr\linewidth+6pt\relax},因为线宽是列表环境中的另一个。
\lstset{
% [...]
linebackgroundcolor={\ifodd\value{lstnumber}\color{codegray}\fi},
linebackgroundsep=3pt,
linebackgroundwidth={\dimexpr\linewidth+6pt\relax}
% [...]
}
此选项可实现所需外观。非常感谢!
(无法上传图片-抱歉!)
编辑编号1
\lstset{
linebackgroundcolor={\ifodd\value{lstnumber}\color{codegray}\fi},
linebackgroundsep=3pt,
linebackgroundwidth={\dimexpr\linewidth + (\lst@linebgrdsep)*2 \relax},
frame=lr,
xleftmargin=15pt,
xrightmargin=5pt,
framexleftmargin=0pt,
framexrightmargin=0pt
}