1

I use tcolorbox to write exercises with solutions for a book of probability. When I use some floats, like tables or figures, it refuses it, and I have error messages like ! LaTeX Error: Not in outer par mode. or Float(s) lost.. so I'm obliged to undo the float command begin{figure}.. \end{figure} and use instead the caption package, and it's command \captionof{figure}{The caption}...

Now, I want to use floats in such cases. 1/ How can I use it ?

2/ Moreover, is it possible to use with \NewTColorBox some rotated tables, given by the package ctable, like this one, for example: ?

\ctable[
caption={Mycaption},
label={tab:Mytable},
botcap, % caption below table
sideways % This rotates the table
]
{ccc}
{
% Table footnotes here
}
{
Column 1 & Column 2 & Column 3 \\
Row 2, 1 & 2, 2     & 2, 3 \\
}

3/ More and moreover, can I write some things outside the box of solution, for writing some comments for example, or some floats !, between two successive solutions ?

I give an example of an exercise, where one can note that the commands \begin{figure} \end{figure} are commented, (there is the error Not in outer par mode when it is uncomented)

\documentclass{book}

\usepackage[most]{tcolorbox} 
\tcbuselibrary{skins,breakable,xparse}

\usepackage{caption}

\usepackage[most]{tcolorbox}
\tcbuselibrary{skins,breakable,xparse}

\usepackage{tikz}
\usetikzlibrary{arrows,backgrounds,plotmarks,calc,positioning,shadings,patterns,tikzmark}
\usepackage{pgfplots}

%\usepackage{ctable}% Uncomment If one wants to compile the ctable given as example
\usepackage{polyglossia}
\setmainlanguage{english}

\NewTColorBox[auto counter,number within=chapter]{exercise}{m+O{}}{%
    enhanced,
    colframe=green!20!black,
    colback=yellow!10!white,
    coltitle=green!40!black,
    fonttitle=\bfseries,
    underlay={\begin{tcbclipinterior}
        \shade[inner color=green!80!yellow,outer color=yellow!10!white]
            (interior.north west) circle (2cm);
        \draw[help lines,step=5mm,yellow!80!black,shift={(interior.north west)}]
            (interior.south west) grid (interior.north east);
        \end{tcbclipinterior}},
    title={Exercise~ \thetcbcounter:},
    label={exercise:#1},
    attach title to upper=\quad,
    after upper={\par\hfill\textcolor{green!40!black}%
        {\itshape Solution on page~\pageref{solution:#1}}},
    lowerbox=ignored,
    savelowerto=solutions/exercise-\thetcbcounter.tex,
    record={\string\solution{#1}{solutions/exercise-\thetcbcounter.tex}},
    #2
}

\NewTotalTColorBox{\solution}{mm}{%
    enhanced,
    colframe=red!20!black,
    colback=yellow!10!white,
    coltitle=red!40!black,
    fonttitle=\bfseries,
    underlay={\begin{tcbclipinterior}
        \shade[inner color=red!50!yellow,outer color=yellow!10!white]
            (interior.north west) circle (2cm);
        \draw[help lines,step=5mm,yellow!80!black,shift={(interior.north west)}]
            (interior.south west) grid (interior.north east);
        \end{tcbclipinterior}},
    title={Solution of Exercise~\ref{exercise:#1} on page~\pageref{exercise:#1}:},
    phantomlabel={solution:#1},
    attach title to upper=\par,
}{\input{#2}}

\tcbset{no solution/.style={no recording,after upper=}}

\begin{document}
%% Uncomment If one wants to compile this ctable
%%  \ctable[
%%  caption={Your table caption},
%%  label={tab:mytable},
%%  botcap, % caption below table
%%  sideways % This rotates the table
%%  ]
%%  {ccc}
%%  {
%%  % Table footnotes here
%%  }
%%  {
%%  Column 1 & Column 2 & Column 3 \\
%%  Row 2, 1 & 2, 2     & 2, 3 \\
%%  }
\chapter{The first chapter}
\tcbstartrecording
\begin{exercise}{BanachMatch}
The bar graph of the distribution of Banach matches..
\tcblower
%   \begin{figure}[h]
    {\centering
\begin{tikzpicture}[
    declare function={
    comb(\n,\k)=\n!/(\k!*(\n-\k)!);
    albanach(\k,\n,\p)=comb(2*\n-\k,\n)*(\p^(\n+1)*(1-\p)^(\n-\k)+\p^(\n-\k)*(1-\p)^(\n+1));
    }
]
\begin{axis}[
    xlabel={$x$}, ylabel={$P(X=x)$},
    yticklabel style={
        /pgf/number format/fixed,
        /pgf/number format/fixed zerofill,
        /pgf/number format/precision=2
    },
    legend style={
cells={anchor=east},
legend pos=outer north east,
    xlabel={$x$}, ylabel={$P(X=x)$},samples at={0,...,50},
    yticklabel style={
        /pgf/number format/fixed,
        /pgf/number format/fixed zerofill,
        /pgf/number format/precision=2
                     }
              },
    ybar=0pt, bar width=2
]
\addplot [fill=orange, fill opacity=0.5] {albanach(x,50,0.5)}; \addlegendentry{$p=0.5$}
\addplot [fill=cyan, fill opacity=0.5] {albanach(x,50,0.4)}; \addlegendentry{$p=0.4$}
\addplot [fill=blue, fill opacity=0.5] {albanach(x,50,0.3)}; \addlegendentry{$p=0.3$}
\end{axis}
\end{tikzpicture}
\par}
\captionof{figure}{Banach matches}
%\end{figure}
\end{exercise}
\tcbstoprecording
\tcbinputrecords
\end{document}

and its compilation, using xelatex: enter image description here

  • 2
    you want your tclorbox to be the content of a figure so it floats, not have he figure inside a box (which is an error) – David Carlisle Jan 29 '17 at 21:12
  • Too much (unrelated) questions in one post, in my point of view – user31729 Jan 29 '17 at 21:14
  • The post above does not really need xelatex, in my point of view and if the colorboxes should float, use the float option to the boxes, however, sometimes it is not well-designed to let 'exercises' float away (the order might be important) and in bad occasions, the solution to an exercise can appear before the exercise if floating is allowed for both – user31729 Jan 29 '17 at 21:18
  • @ChristianHupfer I attend to give a list of exercises for each chapter, after the list of all solutions, so the solution cannot appear before an exercise – Faouzi Bellalouna Jan 29 '17 at 21:37
  • @DavidCarlisle how can I insert then the figure into the solution if the solution is a tcolorbox ? More precisely, for the question in point 3/ More and moreover, can I write some things outside the box of solution, for writing some comments for example, or some floats !, between two successive solutions ? – Faouzi Bellalouna Jan 29 '17 at 21:41
2

You have the nesting in the wrong order, you want your coloured boxes to float, so they should be inside figure you do not want figure to be inside the box.

this works without error

\begin{figure}[htp]
\begin{exercise}{BanachMatch}

....

\end{exercise}
\end{figure}

with no other changes needed to your document.


\documentclass{book}

\usepackage[most]{tcolorbox} 
\tcbuselibrary{skins,breakable,xparse}

\usepackage{caption}

\usepackage[most]{tcolorbox}
\tcbuselibrary{skins,breakable,xparse}

\usepackage{tikz}
\usetikzlibrary{arrows,backgrounds,plotmarks,calc,positioning,shadings,patterns,tikzmark}
\usepackage{pgfplots}

%\usepackage{ctable}% Uncomment If one wants to compile the ctable given as example
\usepackage{polyglossia}
\setmainlanguage{english}

\NewTColorBox[auto counter,number within=chapter]{exercise}{m+O{}}{%
    enhanced,
    colframe=green!20!black,
    colback=yellow!10!white,
    coltitle=green!40!black,
    fonttitle=\bfseries,
    underlay={\begin{tcbclipinterior}
        \shade[inner color=green!80!yellow,outer color=yellow!10!white]
            (interior.north west) circle (2cm);
        \draw[help lines,step=5mm,yellow!80!black,shift={(interior.north west)}]
            (interior.south west) grid (interior.north east);
        \end{tcbclipinterior}},
    title={Exercise~ \thetcbcounter:},
    label={exercise:#1},
    attach title to upper=\quad,
    after upper={\par\hfill\textcolor{green!40!black}%
        {\itshape Solution on page~\pageref{solution:#1}}},
    lowerbox=ignored,
    savelowerto=solutions/exercise-\thetcbcounter.tex,
    record={\string\solution{#1}{solutions/exercise-\thetcbcounter.tex}},
    #2
}

\NewTotalTColorBox{\solution}{mm}{%
    enhanced,
    colframe=red!20!black,
    colback=yellow!10!white,
    coltitle=red!40!black,
    fonttitle=\bfseries,
    underlay={\begin{tcbclipinterior}
        \shade[inner color=red!50!yellow,outer color=yellow!10!white]
            (interior.north west) circle (2cm);
        \draw[help lines,step=5mm,yellow!80!black,shift={(interior.north west)}]
            (interior.south west) grid (interior.north east);
        \end{tcbclipinterior}},
    title={Solution of Exercise~\ref{exercise:#1} on page~\pageref{exercise:#1}:},
    phantomlabel={solution:#1},
    attach title to upper=\par,
}{\input{#2}}

\tcbset{no solution/.style={no recording,after upper=}}

\begin{document}
%% Uncomment If one wants to compile this ctable
%%  \ctable[
%%  caption={Your table caption},
%%  label={tab:mytable},
%%  botcap, % caption below table
%%  sideways % This rotates the table
%%  ]
%%  {ccc}
%%  {
%%  % Table footnotes here
%%  }
%%  {
%%  Column 1 & Column 2 & Column 3 \\
%%  Row 2, 1 & 2, 2     & 2, 3 \\
%%  }
\chapter{The first chapter}
\tcbstartrecording
\begin{figure}[htp]
\begin{exercise}{BanachMatch}
The bar graph of the distribution of Banach matches..
\tcblower
    {\centering
\begin{tikzpicture}[
    declare function={
    comb(\n,\k)=\n!/(\k!*(\n-\k)!);
    albanach(\k,\n,\p)=comb(2*\n-\k,\n)*(\p^(\n+1)*(1-\p)^(\n-\k)+\p^(\n-\k)*(1-\p)^(\n+1));
    }
]
\begin{axis}[
    xlabel={$x$}, ylabel={$P(X=x)$},
    yticklabel style={
        /pgf/number format/fixed,
        /pgf/number format/fixed zerofill,
        /pgf/number format/precision=2
    },
    legend style={
cells={anchor=east},
legend pos=outer north east,
    xlabel={$x$}, ylabel={$P(X=x)$},samples at={0,...,50},
    yticklabel style={
        /pgf/number format/fixed,
        /pgf/number format/fixed zerofill,
        /pgf/number format/precision=2
                     }
              },
    ybar=0pt, bar width=2
]
\addplot [fill=orange, fill opacity=0.5] {albanach(x,50,0.5)}; \addlegendentry{$p=0.5$}
\addplot [fill=cyan, fill opacity=0.5] {albanach(x,50,0.4)}; \addlegendentry{$p=0.4$}
\addplot [fill=blue, fill opacity=0.5] {albanach(x,50,0.3)}; \addlegendentry{$p=0.3$}
\end{axis}
\end{tikzpicture}
\par}
\captionof{figure}{Banach matches}
\end{exercise}
\end{figure}
\tcbstoprecording
\tcbinputrecords
\end{document}
  • After doing this, I have always the message ! LaTeX Error: Not in outer par mode. At all, in the exercise, the solution is given (which is defined after the command \tcblower) in another box. The question is then: Which box is inside the figure ? – Faouzi Bellalouna Jan 29 '17 at 22:04
  • @FaouziBellalouna I added the complete error free document – David Carlisle Jan 29 '17 at 22:16
  • Thanks. It works and I accepted the answer. Have you any idea for how to write outside the box answer please !? – Faouzi Bellalouna Jan 29 '17 at 22:24
  • @FaouziBellalouna i am not sure what you mean but presumably you would also want to float your answers otherwise the questions will float past answers and be out of sequence (unless all your answers are at the end. In any case that seems to be a separate question/ – David Carlisle Jan 29 '17 at 22:27
  • I give for each chapter, a list of exercises in the section \section{List of exercises} , after their solutions, in a last section \section{Answers for exercises} – Faouzi Bellalouna Jan 29 '17 at 22:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.