我可以毫无问题地运行程序,同时使用listings
和lstlinebgrd
包突出显示几行代码。但包 v1.7 的最新更新listings
甚至在早期工作的程序上也给我带来了错误。例如,此处的程序我正在提供一个类似的程序,但这次是在 beamer 中。
\documentclass{beamer}
\usepackage{xcolor,listings, lstlinebgrd}
% \makeatletter
% \let\old@lstKV@SwitchCases\lstKV@SwitchCases
% \def\lstKV@SwitchCases#1#2#3{}
% \makeatother
% \usepackage{lstlinebgrd}
% \makeatletter
% \let\lstKV@SwitchCases\old@lstKV@SwitchCases
%
% \lst@Key{numbers}{none}{%
% \def\lst@PlaceNumber{\lst@linebgrd}%
% \lstKV@SwitchCases{#1}%
% {none:\\%
% left:\def\lst@PlaceNumber{\llap{\normalfont
% \lst@numberstyle{\thelstnumber}\kern\lst@numbersep}\lst@linebgrd}\\%
% right:\def\lst@PlaceNumber{\rlap{\normalfont
% \kern\linewidth \kern\lst@numbersep
% \lst@numberstyle{\thelstnumber}}\lst@linebgrd}%
% }{\PackageError{Listings}{Numbers #1 unknown}\@ehc}}
% \makeatother
\begin{document}
\begin{frame}[fragile]{Problem}
Test programme:
\begin{lstlisting}[language=C, gobble=6, linebackgroundcolor={%
\btLstHL<1>{1,3,5-6}%
\btLstHL<2>{4}%
}]
#include <stdio.h>
int main(void) {%
printf("Hello World!");
return 0;
}
\end{lstlisting}
\end{frame}
\end{document}
两者都给出相同的错误
! Package Listings Error: Numbers none unknown.
See the Listings package documentation for explanation.
Type H <return> for immediate help.
...
l.36 ...Error{Listings}{Numbers #1 unknown}\@ehc}}
lstlinebgrd package
有什么解决方法吗?如果目前没有解决方案,作者也许可以给我一些解决方法。很抱歉报告/发布了最近更新的问题。
答案1
最近 (https://tug.org/pipermail/tex-live-commits/2018-September/007278.html)listings
将宏中的内部分隔符\lstKV@SwitchCases
从切换&
为:
。根据源代码中的注释,必须发生这种情况,因为在 \lstdefinestyle 中的 lstlisting 选项中添加 frame=none 会导致表格错误。
lstlinebgrd
您应该通过文档中提到的官方渠道联系维护者并要求他更新他的软件包。(编辑:报道于https://bitbucket.org/martin_scharrer/lstaddons/issues/2/lstlinebgrd-broken-with-recent-update-of)
与此同时,这里有一个非常粗略的解决方法,可以修复受影响的 的定义\lst@Key{numbers}
。这应该可以恢复lstlinebgrd
到以前的辉煌,但它不是很优雅,因为它本质上最终复制了 的\lst@Key{numbers}
定义lstlinebgrd.sty
。
\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}
\makeatletter
\let\old@lstKV@SwitchCases\lstKV@SwitchCases
\def\lstKV@SwitchCases#1#2#3{}
\makeatother
\usepackage{lstlinebgrd}
\makeatletter
\let\lstKV@SwitchCases\old@lstKV@SwitchCases
\lst@Key{numbers}{none}{%
\def\lst@PlaceNumber{\lst@linebgrd}%
\lstKV@SwitchCases{#1}%
{none:\\%
left:\def\lst@PlaceNumber{\llap{\normalfont
\lst@numberstyle{\thelstnumber}\kern\lst@numbersep}\lst@linebgrd}\\%
right:\def\lst@PlaceNumber{\rlap{\normalfont
\kern\linewidth \kern\lst@numbersep
\lst@numberstyle{\thelstnumber}}\lst@linebgrd}%
}{\PackageError{Listings}{Numbers #1 unknown}\@ehc}}
\makeatother
\begin{document}
\begin{lstlisting}[linebackgroundcolor={\ifodd\value{lstnumber}\color{lightgray}\fi}]
Lorem
ipsum
dolor
\end{lstlisting}
\end{document}