列表 - 使用 escapsinside 的奇怪行为(非预期空格)

列表 - 使用 escapsinside 的奇怪行为(非预期空格)

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

您的代码中有三个错误:

  1. \rctnr在你错过的定义中%
  2. 在示例 1 的末尾,您写道?\label{lhst:C}。缺少结尾?...
  3. 在示例 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}

得到结果:

生成的 pdf

相关内容