lstaddons:动态线宽计算

lstaddons:动态线宽计算

我使用名为“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
}

最终的清单

相关内容