我做了这个最小的例子来展示我遇到的问题:
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\definecolor{background}{HTML}{EEEEEE}
\definecolor{xmlOrange}{HTML}{cc7a00}
\definecolor{xmlGreen}{HTML}{009900}
\lstset{
basicstyle=\fontsize{9}{11}\ttfamily,
escapeinside={\@~}{~},
showstringspaces=true,
breaklines=true,
frame=lines,
backgroundcolor=\color{background},
commentstyle=\color{blue},
morecomment=[s][\color{xmlOrange}]{"}{"},
morecomment=[s][\color{xmlGreen}]{<!--}{-->},
}
\newcommand{\test}{{\colorbox{background}{\color{xmlOrange}{test Text}}}}
\begin{document}
\begin{lstlisting}
<root>
<header test="@~\test~">
</header>
</root>
\end{lstlisting}
\end{document}
最终结果如下:
我必须这样做,因为“测试文本”取自不同的命令(这无法更改)。
如果我完全删除颜色框,只要通过 LaTeX 代码输入到列表中的文本不会导致新行,它就会起作用。一旦发生这种情况,整行就会变成白色,看起来更糟:
我尝试了许多包裹,但它们似乎都只是在列表中创建一个盒子,这对我的情况不起作用。
使用外部文件更新:
使用
\newtcbinputlisting{xmlListing}{colframe=background, colback=background, listing options={language=xml,columns=fullflexible},listing only }
然后在名为 test.xml 的文件中,使用前面的示例 xml:
\xmlListing{test.xml}
结果是:
答案1
感谢 Ulrike Fischer(以及通过它找到的文档和其他答案),解决方案是通过简单地创建一个新的 cbtinputlisting
\newtcbinputlisting{\xmlListing}[1]{colframe=background, colback=background, listing options={language=xml,columns=fullflexible}, breakable, listing only,listing file={#1} }
然后使用它
\xmlListing{filename}