lstlisting
使用with时escapeinside
,似乎会产生意外的空格
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{listings}
\lstset{basicstyle=\ttfamily,
language=C,
breaklines,
frame=leftline,
numberfirstline=true,
numbers=left,
tabsize=4,
% xleftmargin = 0pt,
% xrightmargin = 30pt,
% breakindent = 20pt,
numberblanklines=true,
escapeinside={?}{?},
}
\let\origthelstnumber\thelstnumber
\renewcommand{\lstlistingname}{Quellcode}
\newcommand*\rctnr[1]{%
\setcounter{lstnumber}{\numexpr#1-1\relax}
% \lst@AddToHook{OnNewLine}{%
% \let\thelstnumber\origthelstnumber%
% \refstepcounter{lstnumber}%
% }%
}
\begin{document}
% example 1
Example 1
\begin{lstlisting}[firstnumber=116, captionpos=b]
if (cmmnd == 31) { ?\rctnr{118}?
DIGITAL_IO_SetOutputLow(&DIGITAL_BOOSTC_EN); ?\label{lhst:A}?
PWM_CCU8_SetDutyCycleSymmetric(&PWM_BOOSTC_L,XMC_CCU8_SLICE_COMPARE_CHANNEL_1, value * 100);?\label{lhst:B} \rctnr{124}?
DIGITAL_IO_SetOutputHigh(&DIGITAL_BOOST_DISP); ?\label{lhst:C}
}
\end{lstlisting}
% example 2
Example 2
\begin{lstlisting}[firstnumber=116, captionpos=b]
if (cmmnd == 31) { ?\rctnr{118}?
DIGITAL_IO_SetOutputLow(&DIGITAL_BOOSTC_EN); ?\label{lhst:A}?
PWM_CCU8_SetDutyCycleSymmetric(&PWM_BOOSTC_L,XMC_CCU8_SLICE_COMPARE_CHANNEL_1, value * 100);
?\label{lhst:B} \rctnr{124}?DIGITAL_IO_SetOutputHigh(&DIGITAL_BOOST_DISP); ?\label{lhst:C}
}
\end{lstlisting}
\end{document}
我想改变行号...到目前为止效果很好...但转入 LaTeX 显然会产生多余的空格,否则我不会得到另一行,最后一行的缩进也不会消失,正如你在第二个例子中看到的那样。
如果有人能提供一些关于我在这里遗漏了什么或如何实施解决方法的线索,那就太好了。
答案1
您的代码中有三个错误:
\rctnr
在你错过的定义中%
- 在示例 1 的末尾,您写道
?\label{lhst:C}
。缺少结尾?
... - 在示例 2 的末尾,您写道
?\label{lhst:C}
。缺少结尾?
...
请参阅以下 MWE:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{listings}
\lstset{basicstyle=\ttfamily,
language=C,
breaklines,
frame=leftline,
numberfirstline=true,
numbers=left,
tabsize=4,
% xleftmargin = 0pt,
% xrightmargin = 30pt,
% breakindent = 20pt,
numberblanklines=true,
escapeinside={?}{?},
}
\let\origthelstnumber\thelstnumber
\renewcommand{\lstlistingname}{Quellcode}
\newcommand*\rctnr[1]{%
\setcounter{lstnumber}{\numexpr#1-1\relax}% <=======================
% \lst@AddToHook{OnNewLine}{%
% \let\thelstnumber\origthelstnumber%
% \refstepcounter{lstnumber}%
% }%
}
\begin{document}
% example 1
Example 1
\begin{lstlisting}[firstnumber=116, captionpos=b]
if (cmmnd == 31) { ?\rctnr{118}?
DIGITAL_IO_SetOutputLow(&DIGITAL_BOOSTC_EN); ?\label{lhst:A}?
PWM_CCU8_SetDutyCycleSymmetric(&PWM_BOOSTC_L,XMC_CCU8_SLICE_COMPARE_CHANNEL_1, value * 100);?\label{lhst:B} \rctnr{124}?
DIGITAL_IO_SetOutputHigh(&DIGITAL_BOOST_DISP); ?\label{lhst:C}?
}
\end{lstlisting}
% example 2
Example 2
\begin{lstlisting}[firstnumber=116, captionpos=b]
if (cmmnd == 31) { ?\rctnr{118}?
DIGITAL_IO_SetOutputLow(&DIGITAL_BOOSTC_EN); ?\label{lhst:A}?
PWM_CCU8_SetDutyCycleSymmetric(&PWM_BOOSTC_L,XMC_CCU8_SLICE_COMPARE_CHANNEL_1, value * 100);
?\label{lhst:B} \rctnr{124}?DIGITAL_IO_SetOutputHigh(&DIGITAL_BOOST_DISP); ?\label{lhst:C}?
}
\end{lstlisting}
\end{document}
得到结果: