我想使用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}
输出是
\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}