使用 \tcbinputlisting 仅当设置了 hbox 时才显示第一页

使用 \tcbinputlisting 仅当设置了 hbox 时才显示第一页

我想使用hbox带有的选项,\tcbinputlisting因为它会自动调整背景颜色和框以适应代码列表的宽度。问题是,如果代码列表超过一页长,它只会显示第一页(它不能将水平框拆分为多页?)

我想问一下是否有人知道一个技巧,可以让一个人使用hbox并仍然显示所有页面?如果没有hbox这个选项,我就失去了使用此包的主要优势,只能直接使用 listing 包。

以下是问题的 MWE

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[margin=1in]{geometry}
\usepackage{listings}
\usepackage{color}
\definecolor{bg}{RGB}{240,240,240}    
\usepackage{upquote} %to fix string quotes
\usepackage[most]{tcolorbox}
\tcbuselibrary{listings}
\usepackage{matlab-prettifier}

\begin{document}
\tcbinputlisting{nobeforeafter,enhanced,listing only,hbox,
   breakable,listing file=HW2.m,size=small,
   listing options={framerule=0.05pt,style=Matlab-editor,numbers=left,
       numberstyle=\scriptsize,basicstyle=\ttfamily\small,breaklines = true,
       escapechar=`,showspaces=false,mlshowsectionrules = true}}
\end{document}

输出是

Mathematica 图形

\begin{tcblisting}..code..\end{tbclisting}使用相同选项时也会发生此问题。

您可以使用任何文件来查看问题,只要文件的代码长度超过一页即可。如果您喜欢使用HW2.m上面示例中使用的文件,请点击此处高中二年级

再次强调,我想使用 hbox 的主要原因是它可以将背景缩小到代码大小,从而让它看起来更好。以下是参考 如何将列表中的背景颜色裁剪为代码中最长的一行

答案1

hbox 不会超出页面范围 - 请参阅文档。但您可以将框存储在数组中并检索宽度:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[margin=1in]{geometry}
\usepackage{listings}
\usepackage[most]{tcolorbox}

\begin{filecontents}{mylisting.txt}
blbub
blblb
\end{filecontents}
\begin{document}
\newboxarray{mylisting}
\tcbinputlisting{nobeforeafter,enhanced,listing only,hbox,
                 listing file=mylisting.txt,
                 size=small,
                 store to box array=mylisting,
                 listing options={framerule=0.05pt,numbers=left,
                                  numberstyle=\scriptsize,basicstyle=\ttfamily\small,
                                  breaklines = true,showspaces=false}}

\boxarraygetwidth[mylisting]{\mylistingwidth}{1}

\tcbinputlisting{nobeforeafter,enhanced,listing only,
                 breakable,listing file=mylisting.txt,size=small,
                 width=\mylistingwidth,
                 listing options={framerule=0.05pt,numbers=left,
                                  numberstyle=\scriptsize,
                                  basicstyle=\ttfamily\small,
                                  breaklines = true,showspaces=false}}

\end{document}

在此处输入图片描述

相关内容