请比较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
\lstinputlisting
listings
tcblisting
\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。这是一种奇怪的行为,但它在我的环境中产生了所需的结果。
托马斯,你的包裹令人印象深刻。