【问题标题】:Is tcolorbox compatible with tabular, tabularx?tcolorbox 与 tabular、tabularx 兼容吗?
【发布时间】:2020-06-12 11:26:35
【问题描述】:

tcolorbox、listing 和 tabularx tabular 之间的某些组合无法编译。

是否可以解决tabular tabularx和tcolorbox和tabularx和listing之间的问题?

tcolorbox 与 tabular、tabularx 兼容吗?

下面是 MWE

\documentclass{book}
%mwe_clisting3

\usepackage{ae,lmodern} % ou seulement l'un, ou l'autre, ou times etc.
\usepackage[english,french]{babel}
\usepackage[utf8]{inputenc}
%%% Note that this is font encoding (determines what kind of font is used), not input encoding. 
\usepackage[T1]{fontenc}
\usepackage[cyr]{aeguill}


\usepackage{tikz}
\tikzset{coltria/.style={fill=red!15!white}}
\usepackage{tcolorbox}
\usepackage{multirow}
\usepackage{tabularx}
\usepackage{longtable}
\tcbuselibrary{listings,breakable,skins,documentation,xparse}
\lstdefinestyle{Clst}{     
    numbers=left, 
    numberstyle=\small, 
    numbersep=8pt, 
    frame = none, 
    language=C, 
    framexleftmargin=5pt,            % la marge à  gauche du code
    % test pour améliorer la présentation du code
    upquote=true,
    columns=flexible,
    basicstyle=\ttfamily,
    basicstyle=\small, % ==> semble optimal \tiny est vraiment trop petit
    % provoque une erreur texcsstyle=*\color{blue},
    commentstyle=\color{green},    % comment style
    keywordstyle=\color{blue},       % keyword style
    rulecolor=\color{black},         % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
    showspaces=false,                % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'        
    showtabs=false,                  % show tabs within strings adding particular underscores
    stringstyle=\color{cyan},     % string literal style
    numbers=none, 
    tabsize=4,
    % pour couper les lignes trop longues
    breaklines,
    breakindent=1.5em, %?indente?de?3?caracteres?vers?la?droite
}
\newtcblisting{Clisting}[2][]{empty,breakable,leftrule=5mm,left=2mm,
    %frame style={fill,top color=red!75!black,bottom color=red!75!black,middle color=red},
    frame style={fill,top color=green!75!black,bottom color=green!75!black,middle color=green},
    listing only,
    listing engine=listings, 
    listing options={style=Clst,tabsize=4,breaklines,
        breakindent=1.5em,columns=fullflexible},
    %       keywordstyle=\color{red}},
    colback=yellow!15!white,
    % code for unbroken boxes:
    frame code={\path[tcb fill frame] (frame.south west)--(frame.north west)
        --([xshift=-5mm]frame.north east)--([yshift=-5mm]frame.north east)
        --([yshift=5mm]frame.south east)--([xshift=-5mm]frame.south east)--cycle; },
    interior code={\path[tcb fill interior] (interior.south west)--(interior.north west)
        --([xshift=-4.8mm]interior.north east)--([yshift=-4.8mm]interior.north east)
        --([yshift=4.8mm]interior.south east)--([xshift=-4.8mm]interior.south east)
        --cycle; },
    attach boxed title to top center={yshift=-2mm},
    title=\fcolorbox{black}{black}{\red{#2}},
    % code for the first part of a break sequence:
    skin first is subskin of={emptyfirst}{%
        frame code={\path[tcb fill frame] (frame.south west)--(frame.north west)
            --([xshift=-5mm]frame.north east)--([yshift=-5mm]frame.north east)
            --(frame.south east)--cycle;
            \path[coltria] ([xshift=2.5mm,yshift=1mm]frame.south west) -- +(120:2mm)
            -- +(60:2mm)-- cycle; },
        interior code={\path[tcb fill interior] (interior.south west|-frame.south)
            --(interior.north west)--([xshift=-4.8mm]interior.north east)
            --([yshift=-4.8mm]interior.north east)--(interior.south east|-frame.south)
            --cycle; },
    },%
    % code for the middle part of a break sequence:
    skin middle is subskin of={emptymiddle}{%
        frame code={\path[tcb fill frame] (frame.south west)--(frame.north west)
            --(frame.north east)--(frame.south east)--cycle;
            \path[coltria] ([xshift=2.5mm,yshift=-1mm]frame.north west) -- +(240:2mm)
            -- +(300:2mm) -- cycle;
            \path[coltria] ([xshift=2.5mm,yshift=1mm]frame.south west) -- +(120:2mm)
            -- +(60:2mm) -- cycle;
        },
        interior code={\path[tcb fill interior] (interior.south west|-frame.south)
            --(interior.north west|-frame.north)--(interior.north east|-frame.north)
            --(interior.south east|-frame.south)--cycle; },
    },
    % code for the last part of a break sequence:
    skin last is subskin of={emptylast}{%
        frame code={\path[tcb fill frame] (frame.south west)--(frame.north west)
            --(frame.north east)--([yshift=5mm]frame.south east)
            --([xshift=-5mm]frame.south east)--cycle;
            \path[coltria] ([xshift=2.5mm,yshift=-1mm]frame.north west) -- +(240:2mm)
            -- +(300:2mm) -- cycle;
        },
        interior code={\path[tcb fill interior] (interior.south west)
            --(interior.north west|-frame.north)--(interior.north east|-frame.north)
            --([yshift=4.8mm]interior.south east)--([xshift=-4.8mm]interior.south east)
            --cycle; },#1}}

\begin{document}

\begin{lstlisting} [xleftmargin=5 pt,frame=single]
g_action_map_add_action (
G_ACTION_MAP (app), 
G_ACTION (new_action));
g_action_map_add_action (
G_ACTION_MAP (app), 
G_ACTION (open_action));
\end{lstlisting}

\begin{Clisting} {title}
g_action_map_add_action (
G_ACTION_MAP (app), 
G_ACTION (new_action));
g_action_map_add_action (
G_ACTION_MAP (app), 
G_ACTION (open_action));
\end{Clisting}
 first table ok with tabular

\begin{tabular}{|p{4cm}| p{10cm}|}
    \hline
    \textbf{Questions}&     \textbf{Réponses}\\ 
    \hline  
    text&
    text
    \begin{lstlisting} [xleftmargin=5 pt]
    g_action_map_add_action (
    G_ACTION_MAP (app), 
    G_ACTION (new_action));
    g_action_map_add_action (
    G_ACTION_MAP (app), 
    G_ACTION (open_action));
    \end{lstlisting}\\
    \hline  
\end{tabular}
\bigskip

second table no ok with tcolobox

\begin{tabular}{|p{4cm}| p{10cm}|}
    \hline
    \textbf{Questions}&     \textbf{Réponses}\\ 
    \hline  
    text&
    text

%   \begin{Clisting} {titre}
%   g_action_map_add_action (
%   G_ACTION_MAP (app), 
%   G_ACTION (new_action));
%   g_action_map_add_action (
%   G_ACTION_MAP (app), 
%   G_ACTION (open_action));
%   \end{Clisting}
\\
    \hline  
\end{tabular}
\bigskip

thirth table no ok with listing

\noindent\begin{tabularx}{\linewidth}{|p{6cm}| X |}
    \hline
    \textbf{Questions}&     \textbf{Réponses}\\ 
    \hline  
    text&  text

%   \begin{lstlisting} [xleftmargin=5 pt]
%   g_action_map_add_action (
%   G_ACTION_MAP (app), 
%   G_ACTION (new_action));
%   g_action_map_add_action (
%   G_ACTION_MAP (app), 
%   G_ACTION (open_action));
%   \end{lstlisting}
\\
        \hline  
\end{tabularx}
\bigskip

fourth table no ok with tcolorbox


\noindent\begin{tabular}{|p{6cm}| p{10cm} |}
    \hline
    \textbf{Questions}&     \textbf{Réponses}\\ 
    \hline  
    text&  text

    %   \begin{Clisting} {titre}
    %   g_action_map_add_action (
    %   G_ACTION_MAP (app), 
    %   G_ACTION (new_action));
    %   g_action_map_add_action (
    %   G_ACTION_MAP (app), 
    %   G_ACTION (open_action));
    %   \end{Clisting}
    \\
    \hline  
\end{tabular}
\bigskip
\end{document}

用pdflatex、xelatex等编译后出现很多错误...

【问题讨论】:

    标签: latex tabular listings


    【解决方案1】:

    语法\red 完全是错误的。如果替换为正确的语法,例如\color{red} 编译正常:

    \documentclass{book}
    %mwe_clisting3
    
    \usepackage{ae,lmodern} % ou seulement l'un, ou l'autre, ou times etc.
    \usepackage[english,french]{babel}
    \usepackage[utf8]{inputenc}
    %%% Note that this is font encoding (determines what kind of font is used), not input encoding. 
    \usepackage[T1]{fontenc}
    \usepackage[cyr]{aeguill}
    
    
    \usepackage{adjustbox}
    
    \usepackage{tikz}
    \tikzset{coltria/.style={fill=red!15!white}}
    \usepackage{tcolorbox}
    \usepackage{multirow}
    \usepackage{tabularx}
    \usepackage{longtable}
    \tcbuselibrary{listings,breakable,skins,documentation,xparse}
    \lstdefinestyle{Clst}{     
        numbers=left, 
        numberstyle=\small, 
        numbersep=8pt, 
        frame = none, 
        language=C, 
        framexleftmargin=5pt,            % la marge à  gauche du code
        % test pour améliorer la présentation du code
        upquote=true,
        columns=flexible,
        basicstyle=\ttfamily,
        basicstyle=\small, % ==> semble optimal \tiny est vraiment trop petit
        % provoque une erreur texcsstyle=*\color{blue},
        commentstyle=\color{green},    % comment style
        keywordstyle=\color{blue},       % keyword style
        rulecolor=\color{black},         % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
        showspaces=false,                % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'        
        showtabs=false,                  % show tabs within strings adding particular underscores
        stringstyle=\color{cyan},     % string literal style
        numbers=none, 
        tabsize=4,
        % pour couper les lignes trop longues
        breaklines,
        breakindent=1.5em, %?indente?de?3?caracteres?vers?la?droite
    }
    \newtcblisting{Clisting}[2][]{empty,breakable,leftrule=5mm,left=2mm,
        %frame style={fill,top color=red!75!black,bottom color=red!75!black,middle color=red},
        frame style={fill,top color=green!75!black,bottom color=green!75!black,middle color=green},
        listing only,
        listing engine=listings, 
        listing options={style=Clst,tabsize=4,breaklines,
            breakindent=1.5em,columns=fullflexible},
        %       keywordstyle=\color{red}},
        colback=yellow!15!white,
        % code for unbroken boxes:
        frame code={\path[tcb fill frame] (frame.south west)--(frame.north west)
            --([xshift=-5mm]frame.north east)--([yshift=-5mm]frame.north east)
            --([yshift=5mm]frame.south east)--([xshift=-5mm]frame.south east)--cycle; },
        interior code={\path[tcb fill interior] (interior.south west)--(interior.north west)
            --([xshift=-4.8mm]interior.north east)--([yshift=-4.8mm]interior.north east)
            --([yshift=4.8mm]interior.south east)--([xshift=-4.8mm]interior.south east)
            --cycle; },
        attach boxed title to top center={yshift=-2mm},
        title=\fcolorbox{black}{black}{\color{red}{#2}},
        % code for the first part of a break sequence:
        skin first is subskin of={emptyfirst}{%
            frame code={\path[tcb fill frame] (frame.south west)--(frame.north west)
                --([xshift=-5mm]frame.north east)--([yshift=-5mm]frame.north east)
                --(frame.south east)--cycle;
                \path[coltria] ([xshift=2.5mm,yshift=1mm]frame.south west) -- +(120:2mm)
                -- +(60:2mm)-- cycle; },
            interior code={\path[tcb fill interior] (interior.south west|-frame.south)
                --(interior.north west)--([xshift=-4.8mm]interior.north east)
                --([yshift=-4.8mm]interior.north east)--(interior.south east|-frame.south)
                --cycle; },
        },%
        % code for the middle part of a break sequence:
        skin middle is subskin of={emptymiddle}{%
            frame code={\path[tcb fill frame] (frame.south west)--(frame.north west)
                --(frame.north east)--(frame.south east)--cycle;
                \path[coltria] ([xshift=2.5mm,yshift=-1mm]frame.north west) -- +(240:2mm)
                -- +(300:2mm) -- cycle;
                \path[coltria] ([xshift=2.5mm,yshift=1mm]frame.south west) -- +(120:2mm)
                -- +(60:2mm) -- cycle;
            },
            interior code={\path[tcb fill interior] (interior.south west|-frame.south)
                --(interior.north west|-frame.north)--(interior.north east|-frame.north)
                --(interior.south east|-frame.south)--cycle; },
        },
        % code for the last part of a break sequence:
        skin last is subskin of={emptylast}{%
            frame code={\path[tcb fill frame] (frame.south west)--(frame.north west)
                --(frame.north east)--([yshift=5mm]frame.south east)
                --([xshift=-5mm]frame.south east)--cycle;
                \path[coltria] ([xshift=2.5mm,yshift=-1mm]frame.north west) -- +(240:2mm)
                -- +(300:2mm) -- cycle;
            },
            interior code={\path[tcb fill interior] (interior.south west)
                --(interior.north west|-frame.north)--(interior.north east|-frame.north)
                --([yshift=4.8mm]interior.south east)--([xshift=-4.8mm]interior.south east)
                --cycle; },#1}
                }
    
    \begin{document}
    
    \begin{lstlisting} [xleftmargin=5 pt,frame=single]
    g_action_map_add_action (
    G_ACTION_MAP (app), 
    G_ACTION (new_action));
    g_action_map_add_action (
    G_ACTION_MAP (app), 
    G_ACTION (open_action));
    \end{lstlisting}
    
    \begin{Clisting} {title}
    g_action_map_add_action (
    G_ACTION_MAP (app), 
    G_ACTION (new_action));
    g_action_map_add_action (
    G_ACTION_MAP (app), 
    G_ACTION (open_action));
    \end{Clisting}
     first table ok with tabular
    
    \begin{tabular}{|p{4cm}| p{10cm}|}
        \hline
        \textbf{Questions}&     \textbf{Réponses}\\ 
        \hline  
        text&
        text
        \begin{lstlisting} [xleftmargin=5 pt]
        g_action_map_add_action (
        G_ACTION_MAP (app), 
        G_ACTION (new_action));
        g_action_map_add_action (
        G_ACTION_MAP (app), 
        G_ACTION (open_action));
        \end{lstlisting}\\
        \hline  
    \end{tabular}
    \bigskip
    
    second table no ok with tcolobox
    
    \begin{tabular}{|p{4cm}| p{10cm}|}
        \hline
        \textbf{Questions}&     \textbf{Réponses}\\ 
        \hline  
        text&
        text
    
       \begin{Clisting} {titre}
       g_action_map_add_action (
       G_ACTION_MAP (app), 
       G_ACTION (new_action));
       g_action_map_add_action (
       G_ACTION_MAP (app), 
       G_ACTION (open_action));
       \end{Clisting}
    \\
        \hline  
    \end{tabular}
    \bigskip
    
    thirth table no ok with listing
    
    \noindent\begin{tabularx}{\linewidth}{|p{6cm}| X |}
        \hline
        \textbf{Questions}&     \textbf{Réponses}\\ 
        \hline  
        text&  text
    
       \begin{lstlisting}[xleftmargin=5 pt]^^J
       g_action_map_add_action (^^J
       G_ACTION_MAP (app), ^^J
       G_ACTION (new_action));^^J
       g_action_map_add_action (^^J
       G_ACTION_MAP (app), ^^J
       G_ACTION (open_action));^^J
       \end{lstlisting}
    \\
            \hline  
    \end{tabularx}
    \bigskip
    
    fourth table no ok with tcolorbox
    
    
    \noindent\begin{tabular}{|p{6cm}| p{10cm} |}
        \hline
        \textbf{Questions}&     \textbf{Réponses}\\ 
        \hline  
        text&  text
    
           \begin{Clisting} {titre}
           g_action_map_add_action (
           G_ACTION_MAP (app), 
           G_ACTION (new_action));
           g_action_map_add_action (
           G_ACTION_MAP (app), 
           G_ACTION (open_action));
           \end{Clisting}
        \\
        \hline  
    \end{tabular}
    \bigskip
    \end{document}
    

    【讨论】:

      猜你喜欢
      • 2015-08-09
      • 2018-08-27
      • 2011-12-31
      • 2020-03-19
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多