`tcblisting` 内的表格

`tcblisting` 内的表格

假设 a) 您正在准备一份 LaTeX 手册,并且您想要并排举例说明一个表格及其源代码,并且 b) 您考虑使用tcolorbox它的功能来处理类似的情况(源代码及其编译结果并排或彼此叠加等)及其listings库。

以下操作正常:

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{listings,skins,xparse}


\begin{document}

\begin{tcblisting}{}

    \begin{tabular}{lll}
        \hline
        texto & texto & texto\\
        \hline
        texto & texto & texto\\
        \hline
    \end{tabular}
\end{tcblisting}
\end{document}

但是,如果我将其包装tabulartable环境中,则编译结果不会显示(只有代码):

\begin{tcblisting}{}
    \begin{table}
    \begin{tabular}{lll}
        \hline
        texto & texto & texto\\
        \hline
        texto & texto & texto\\
        \hline
    \end{tabular}
    \end{table}
\end{tcblisting}

当然,我的目标不是让表格浮动:我的目标只是通过将前面提到的基本表格示例与里面的视觉输出并排显示来优化空间和外观tcolorbox,就像人们可以做的那样showexpl

\documentclass{article}
\usepackage[utf8]{inputenc}
\setlength{\belowcaptionskip}{2pt}
\usepackage{showexpl}

\begin{document}


\begin{LTXexample} 
 \begin{table}
 \caption{A table}
 \centering 
\begin{tabular}{lll}
\hline        
texto & texto & texto\\
\hline
texto & texto & texto\\
\hlin
\end{tabular}
\end{table}
\end{LTXexample}

\end{document}

在此处输入图片描述

有没有办法让它工作tcolorbox?如果有,怎么做?

答案1

这里有两个选项:

  • 通过本地清空表环境来禁用浮动。这是可以的,只要环境没有标题(简单地从包中重新定义是\caption行不通\captionofcaption)。
  • 使用above*允许均匀浮动材料的键,但要小心浮动表(它可能不会停留在列表中,而是飘走)。

非浮动表

代码:

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{listings,skins,xparse}

\begin{document}

\begin{tcblisting}{listing side text, before lower={%
    \renewenvironment{table}{}{}%
}}
\begin{table}
    \begin{tabular}{lll}
        \hline
        texto & texto & texto\\
        \hline
        texto & texto & texto\\
        \hline
    \end{tabular}
\end{table}
\end{tcblisting}
\begin{tcblisting}{listing above* text}
\begin{table}[ht]
      \centering
    \begin{tabular}{lll}
        \hline
        texto & texto & texto\\
        \hline
        texto & texto & texto\\
        \hline
    \end{tabular}
    \caption{Quack}
\end{table}
\end{tcblisting}
\end{document}

答案2

另一个解决方案是tcolorbox。请参阅第节15.7 Option Keys for Processing and Full Document Examples

带有 的可编译文档table被包含在 tcblisting 中,该文档将在主文档处理期间进行处理。这将创建一个将被处理的外部文档,其 pdf 结果将作为 包含在内comment

table由于我们只对外部列表的一部分感兴趣,因此我们可以使用firstlinelastline选项选择这些行。

由于我们只对表格感兴趣,因此我们需要crop生成的文档。这是通过run system command选项完成的。可以使用自动分配给外部文件的名称,但我无法解析它,因此我使用了已知名称。在这种情况下,我的文件是sensetitol-1.tex,tcolorbox 创建sensetitol-1-listing-1.tex。这是用作命令的输入和输出参数的名称crop

更新托马斯·F·施图姆帮助我解决外部列表的自动名称问题。使用更新的代码,无需知道工作文件的名称。

\documentclass[a4paper]{article}
\usepackage{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[most]{tcolorbox}

\makeatletter
\tcbset{%
    run pdfcrop/.style={%
        run system command={%
            pdfcrop\space\filename@area\[email protected]\space\filename@area\[email protected]}},  
}
\makeatother

\begin{document}

\begin{tcblisting}{%
    enhanced jigsaw, lower separated=false,
    leftlower=0pt, rightlower=0pt,
    colframe=red!50!black, colback=yellow!10!white,
    listing options={%
        style=tcblatex, texcsstyle=*\color{red!70!black}, 
        firstline=8, lastline=18},
    listing side comment,
    pdf comment,
    %freeze pdf,
    compilable listing,
    run pdflatex,
    run pdfcrop,
    %run system command=pdfcrop sensetitol-1-listing-1.pdf sensetitol-1-listing-1.pdf,
}
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{geometry}
\begin{document}
\thispagestyle{empty}
\begin{table}
\caption{A table}
\centering 
\begin{tabular}{lll}
\hline        
texto & texto & texto\\
\hline
texto & texto & texto\\
\hline
\end{tabular}
\end{table}
\end{document}
\end{tcblisting}
\end{document}

在此处输入图片描述

相关内容