如何在处理列表列表中的文字时检测制表符?

如何在处理列表列表中的文字时检测制表符?

在解决方案中使用制表系统使项目的逐项化更加容易,我正在计算空格的数量以确定要插入的前导字符的类型。但是,如果我用制表符替换前导空格,则解决方案不起作用。

如果我能检测到中的制表符literate,那么我就可以适当地\ProcessSpace增加计数器NumOfContigousSpaces,但我不知道如何测试它?

我以为添加tabsize=4, keepspaces=true就可以了,但这还不够。所以我尝试lstag@tabulator使用如何自动跳过列表中的前导空格,但无法让它发挥作用。

下面的代码在W第一行的 之前有 4 个前导空格,在第二行的 之前有一个制表符作为前导字符W。这不会为带有制表符的行产生项目符号:

在此处输入图片描述

W在两行之前使用 4 个空格可以看到正确的输出:

在此处输入图片描述

笔记:

  • 此处发布的代码片段似乎用 4 个空格替换了制表符。因此,要使用下面的 MWE,您需要用字符替换前面的四个Wxxx空格tab

代码:

\documentclass{article}
\usepackage{pgf}
\usepackage{xstring}
\usepackage{listings}

\newcounter{NumOfContigousSpaces}%
\setcounter{NumOfContigousSpaces}{0}%

\newcommand{\Width}{1}%
\newcommand*{\AddApproriateBulletIfFirstChar}[1]{%
    \pgfmathtruncatemacro{\BulletType}{\arabic{NumOfContigousSpaces}/4}%
    \IfEqCase{\BulletType}{%
        {0}{\gdef\Width{1}}
        {1}{\gdef\Width{3}$\bullet$ }
        {2}{\gdef\Width{3}$\circ$ }
        {3}{\gdef\Width{3}$\times$ }
        {4}{\gdef\Width{3}$\star$ }
        {5}{\gdef\Width{3}$-$ }
    }[\gdef\Width{3}$\bullet$ ]%
    #1%
    \setcounter{NumOfContigousSpaces}{0}%
}%
\newcommand*{\ProcessSpace}{%
    \addtocounter{NumOfContigousSpaces}{1}%
    \space%
}%
\newcommand*{\ProcessTab}{%
    \addtocounter{NumOfContigousSpaces}{4}%
    \space\space\space\space%
}%


\makeatletter
\lstdefinestyle{MyItemize}{%
    basicstyle=\ttfamily,
    columns=flexible,
    tabsize=4, keepspaces=true,
     literate=%
        {\ }{{{\ProcessSpace}}}1% Count contigous spaces
        {lstag@tabulator}{{{\ProcessTab}}}4% ??? how detect a tab?
        %
        %--- much code removed here (See https://tex.stackexchange.com/questions/57939/making-more-easy-the-itemized-of-item-with-tabulation-system for full code)
        {W}{{{\AddApproriateBulletIfFirstChar{W}}}}\Width
        {x}{{{\AddApproriateBulletIfFirstChar{x}}}}\Width
}%
\makeatother

\begin{document}
\begin{lstlisting}[style=MyItemize]
    Wxxx xxx
    Wxxx xx xx
\end{lstlisting}
\end{document}

答案1

使用\^^I是在选项卡中输入的“安全”方式,并将让列表进行转换。

lstag@tabulator用以下内容替换该行:

    {\^^I}{{{\ProcessTab}}}4%

生成:

在此处输入图片描述

(设置时使用的字符宽度似乎有问题columns = flexible,因为“制表符”项目符号使用的空间与“四个空格”项目符号使用的空间不同。)

答案2

您可以尝试以下方法:

\lstset{
  ...
  tab=$\bullet$\space,
    
  showtabs=true,
    
  ...
}

相关内容