tcblisting 中的吞噬列表选项存在问题

tcblisting 中的吞噬列表选项存在问题

请比较beamer框架内的以下两个列表。上面的一个是用 制作的listings,第二个是用tcblisting(form tcolorbox) 制作的。两者都使用相同的来源和列表选项。

在此处输入图片描述

以下代码显示,尽管latex代码缩进 2 个制表符,但一旦将制表符转换为空格 ( tab=2),它们就会被部分抑制gobble( gobble=2),但仅限于listings输出。tcblisitng失败,所有制表符都会显示在结果中。这是tcolorbox已知行为还是错误?您知道使用 抑制缩进空格的某种方法吗tcblisting

\documentclass{beamer}
\usepackage{lmodern}
\usepackage[listings]{tcolorbox}

\lstdefinestyle{mystyle}{language=[LaTeX]TeX,
basicstyle=\ttfamily,
texcsstyle=*\color{blue},
breaklines=true,
keywordstyle=\color{green!30!black},
commentstyle=\color{red},
morekeywords={},
otherkeywords={$,\{,\},[,],&},
backgroundcolor=\color{gray!30},
escapeinside=<>,
moretexcs={maketitle},
showtabs=true,
showspaces=true,
tabsize=2,
gobble=2
}

\begin{document}
\begin{frame}[fragile]
\frametitle{Listing}
\begin{lstlisting}[style=mystyle]
    \documentclass{}
        preamble
    \begin{document}
        document text
    \end{document}
\end{lstlisting}

\begin{tcblisting}{listing options={style=mystyle}, listing only}
    \documentclass{}
        preamble
    \begin{document}
        document text
    \end{document}
\end{tcblisting}
\end{frame}

\end{document}

答案1

不幸的是, really 被忽略了。此键对or (取自手册)gooble没有影响,并且内部使用。\lstinline\lstinputlistinglistingstcblisting\lstinputlisting

以下链接考虑了一些规避该问题的技巧:

lstinputlistings 的 autogobble

如何扩展 \lstinputlisting 命令

对于当前的 MWE,可以按如下方式应用:

\documentclass{beamer}
\usepackage{lmodern}
\usepackage[listings]{tcolorbox}

\lstdefinestyle{mystyle}{language=[LaTeX]TeX,
basicstyle=\ttfamily,
texcsstyle=*\color{blue},
breaklines=true,
keywordstyle=\color{green!30!black},
commentstyle=\color{red},
morekeywords={},
otherkeywords={$,\{,\},[,],&},
backgroundcolor=\color{gray!30},
escapeinside=<>,
moretexcs={maketitle},
showtabs=true,
showspaces=true,
tabsize=2,
gobble=2
}

\begin{document}
\begin{frame}[fragile]
\frametitle{Listing}
\begin{lstlisting}[style=mystyle]
    \documentclass{}
        preamble
    \begin{document}
        document text
    \end{document}
\end{lstlisting}

\begin{tcblisting}{
  listing options={style=mystyle,framexleftmargin=-14pt,numbersep=-7pt,xleftmargin=-14pt},
  listing only,
   }
    \documentclass{}
        preamble
    \begin{document}
        document text
    \end{document}
\end{tcblisting}
\end{frame}

\end{document}

在此处输入图片描述

没有showspaces这个看起来也还好。另一个选项是tcblisting使用按键left将所有内容移到左侧。

希望有一天\lstinputlisting能够支持。gobble

答案2

另一个简单示例是人为地吞噬块中的前导空格(或制表符)\begin{tcblisting}。即基于@ThomasFSturm 的tcolorbox包和他的上述示例。

\documentclass[12pt,a4paper]{article}

\usepackage[listings]{tcolorbox}
% Uncomment to reverse the default  order.
%\tcbset{text and listing} 

 % tabsize: increasing this increases the xleftmargin required.
 % xleftmargin: only acts on the text, rather than the listing. 
\lstdefinestyle{mystyle}{
    tabsize=1,
    xleftmargin=-14pt
}

\begin{document}

\begin{itemize}
    \item Lorem ipsum dolor sit amet. 

    \begin{tcblisting}{
            listing options={style=mystyle},
            title=Nibh nunc massa mauris enim dolor}
        Quis libero Ut habitant Phas \LaTeX.
    \end{tcblisting}
\end{itemize}

\end{document}

在此处输入图片描述

如果没有样式,则不良结果是:

在此处输入图片描述 在我的 IDE 中,我将意图设置为制表符(而不是空格),并且每个制表符设置为等于 4 个空格。然而,在上面的代码中,tabsize为了保持所需的倍数xleftmargin较低,将其设置为 1。这是一种奇怪的行为,但它在我的环境中产生了所需的结果。

托马斯,你的包裹令人印象深刻。

相关内容