我的问题和 Peter Grill 的问题很相似,如何在处理列表列表中的文字时检测制表符?
^^M
我正在尝试计算列表中遇到的字符数幕后,使用literate
如下:
literate={\^^M}{{\ProcessNewline}}1,
其全部目的\ProcessNewline
是增加计数器和插入一个^^M
字符(为了在列表中产生换行符,就好像我literate
根本没有弄乱一样)。
增加计数器不是问题,但我尝试插入一个^^M
字符却没有成功。我认为我最好的尝试如下代码所示,但我得到了一个TeX capacity exceeded
错误。
我做错了什么?我该怎么办?
\documentclass{article}
\usepackage{listings}
\newcounter{foo}
\setcounter{foo}{0}
% the following four lines are adapted from Martin Scharrer's lstautogobble package
\begingroup
\catcode `\^^M=\active%
\gdef\activenl{^^M}% Active CR (ASCII 13) ↙character which is used as line break
\endgroup
\newcommand*{\ProcessNewline}{%
\stepcounter{foo}%
% \activenl% You'll get an error if you uncomment his line
}%
\lstset{%
literate={\^^M}{{\ProcessNewline}}1,
}
\begin{document}
\begin{lstlisting}
one
two
three
\end{lstlisting}
\end{document}
答案1
这似乎有效:
\documentclass{article}
\usepackage{listings}
\newcounter{foo}
\setcounter{foo}{0}
\newcommand*{\ProcessNewline}{%
\stepcounter{foo}%
}
\makeatletter
\lst@AddToHook{EOL}{\ProcessNewline}
\makeatother
\begin{document}
\begin{lstlisting}
one
two
three
\end{lstlisting}
[\thefoo]
\end{document}