Como envolver uma figura em um documento de exame?

Como envolver uma figura em um documento de exame?

Posso encerrar em ARTIGO, mas não em EXAME. Como encerrar no EXAME? (Pergunta adicional - se você é um mestre em LaTeX -. - Qual é o pacote mais adequado e fácil para fazer esse tipo de coisa?)

Posso agrupar uma figura em um documento ARTICLE

com este código

\documentclass[12pt]{article}
\usepackage{graphicx,wrapfig,lipsum}
\usepackage[onehalfspacing]{setspace}
\usepackage{mwe}

\begin{document}
%\begin{questions}
    \begin{wrapfigure}{r}{.3\linewidth}
    \centering
    \includegraphics[width=\linewidth]{example-image-a.png}
    \caption{This is A}
\end{wrapfigure}
Hello, I want to wrap this figure in exam
\lipsum[2]\lipsum[1]
%\end{questions}
\end{document}

insira a descrição da imagem aqui

MAS eu gostaria de agrupar imagens em documentos EXAME, e este código não fornece a figura agrupada:

\documentclass[12pt]{exam}
\usepackage{graphicx,wrapfig,lipsum}
\usepackage[onehalfspacing]{setspace}
\usepackage{mwe}

\begin{document}
\begin{questions}
\begin{wrapfigure}{r}{.3\linewidth}
    \centering
    \includegraphics[width=\linewidth]{example-image-a.png}
    \caption{This is A}
\end{wrapfigure}
\question Hello, I want to wrap this figure in exam
\lipsum[2]\lipsum[1]

\end{questions}
\end{document}

insira a descrição da imagem aqui

**

EDITADO (24/02/2019) Depois de tentar a solução Skillmon, tenho um novo problema com listas (enumerar) nas perguntas

**

Este é o problema insira a descrição da imagem aqui

Com o código (apenas adicionando itemize na pergunta com a figura)

        \documentclass[12pt]{exam}
        \usepackage{graphicx,wrapfig,lipsum}
        \input{insbox}
        \usepackage{capt-of}
        \usepackage[onehalfspacing]{setspace}
        \usepackage{mwe}

        \usepackage{etoolbox}

        \makeatletter
        %% Stealing some code from exam:
        \def\mypointshandling
          {%>>>
            \if@bonus
              \def\padded@point@block{%
            \begingroup
              \@placepointstrue
              \bonuspoint@block
            \endgroup
              }%
            \else
              \def\padded@point@block{%
            \begingroup
              \@placepointstrue
              \point@block
            \endgroup
              }%
            \fi
            \if@pointsdropped
            \else
              \if@bonus
            \if@bonusqformat
              \ifx\ques@ref\@queslevel
              \else
                \setup@point@toks
              \fi
            \else
              \setup@point@toks
            \fi
              \else
            \if@qformat
              \ifx\ques@ref\@queslevel
              \else
                \setup@point@toks
              \fi
            \else
              \setup@point@toks
            \fi
              \fi
            \fi
            \global \MyIfPointsfalse
          }%<<<
        \newif\ifMyIfPoints
        \protected\def\questionInsbox
          {%
            \@ifnextchar[\questionInsbox@a{\questionInsbox@a[]}%
          }
        \protected\long\def\questionInsbox@a[#1]#2#3%
          {%
            \@ifnextchar[{\questionInsbox@b{#1}{#2}{#3}}
              {\questionInsbox@b{#1}{#2}{#3}[0]}
          }
        \long\def\questionInsbox@b#1#2#3[#4]%
          {%
            \apptocmd\@itemlabel{\hskip\leftmargin}{}{}%
            \def\makelabel##1{\hss\llap{##1}}%
            \if\relax\detokenize{#1}\relax
              \question
            \else
              \global\MyIfPointstrue
              \patchcmd\@readpoints{\global\@placepointstrue}{\relax}{}{}%
              \question[#1]%
              \patchcmd\@readpoints{\relax}{\global\@placepointstrue}{}{}%
            \fi
            \patchcmd\@itemlabel{\hskip\leftmargin}{}{}{}%
            \let\makelabel\@mklab
            \mbox{}%
            \vspace*{-\baselineskip}%
            \setlength{\leftskip}{\leftmargin}%
            \InsertBoxR{#2}{\hskip-\leftmargin#3\hskip\leftmargin}[#4]%
            \ifMyIfPoints
              \mypointshandling
            \fi
            \the\point@toks
            \ignorespaces
          }
        \makeatother

        \begin{document}
        \begin{questions}
          \question Jei you
          \questionInsbox[5]{0}
            {%
              \parbox[t]{.3\linewidth}
            {%
              \centering
              \includegraphics[width=\linewidth]{example-image-a.png}
              \captionof{figure}{This is A}%
            }%
            }[1]
        Hello, I want to wrap this figure in exam, and you should choose the rigth answer:
        \begin{enumerate}
          \item \lipsum[1]  
          \item \lipsum[1]
        \end{enumerate}

        \question Another
        \end{questions}
        \end{document} 

A solução, não a melhor, mas... na hora que digitei é:

\question See figure and answer, please:    
\begin{enumerate}
\begin{multicols}{2}  
\item answer 1
\item ans 2
\item ans 3
{\centering
    \begingroup
                \centering
                \includegraphics[width=1.00\linewidth]{{example-image-a.png}
                \vspace{-0.3cm}
                \captionof{figure}{}
                \label{fig:croquis-rectangulo-ecuacions.png}
            \endgroup}
  \end{multicols}
  \item ans afeter fig
  \end{enumerate}

EDIT (2019/02/25) após EDIT 3 de Skillmon Admiro seu conhecimento de programação LaTeX. É fantástico!!

A solução é perfeita para texto normal, mas quando você usa listas (enumerar, discriminar,...) o problema permanece. Depois de ler os últimos comentários (24/02/2019) do Skillmon, decido simular as listas em texto normal. Com \ a) resposta 1 resposta 1 resposta 1 resposta 1 resposta 1 resposta 1 resposta 1 resposta 1 resposta 1 resposta 1 resposta 1 resposta 1\ b) resposta 2 resposta 2 resposta 2 resposta 2 resposta 2 resposta 2 resposta 2 resposta 2 resposta 2 resposta 2 resposta 2 resposta 2\

LaTeX é tão lindo, tão complicado!!

Esperando por essa opção (estou otimista, sim!! :-) ) em aulas de exame no futuro... Usarei suas soluções às vezes.

Só falha no final da página, pelo que posso ver, e quando você usa algum \questionInsboxL[5]{2} com página quase em branco entre as perguntas.

OBRIGADO POR TODAS AS SUAS SOLUÇÕES E ESFORÇOS!

insira a descrição da imagem aqui

OBRIGADO, SKILLMON

Responder1

wrapfignão funciona em listas equestions é apenas outra versão de uma lista. O que se segue é uma reimplementação rápida e suja dehttps://tex.stackexchange.com/a/453624/117050para trabalhar com enumeratelistas semelhantes em vez de com itemize. Ele é usado insboxexatamente como a resposta de @Bernard, mas não deve exigir um parágrafo manual. Ele apenas implementa o código para agrupar dentro de uma pergunta, e não dentro da próxima também.

EDITAR:Agora ele deve suportar examo sistema de pontos de, mas não o testei completamente. Você pode voltar e reclamar se não der certo.

EDITAR2:Simplificou a interface para ficar mais parecida com a de \InsertBoxR, o nome da nova macro é \questionInsboxRe ela leva um argumento opcional, dois obrigatórios e um segundo opcional. O primeiro argumento opcional é como o de \question, os dois argumentos obrigatórios e o seguinte opcional são como os de \InsertBoxR.

EDITAR3:Adicionado \questionInsboxLcomportamento corrigido de vários \questionInsboxL/Rusos dentro de um questionsambiente.

\documentclass[12pt]{exam}
\usepackage{graphicx,wrapfig,lipsum}
\input{insbox}
\usepackage{capt-of}
\usepackage[onehalfspacing]{setspace}
\usepackage{mwe}

\usepackage{etoolbox}

\makeatletter
%% Stealing some code from exam:
\def\mypointshandling
  {%>>>
    \if@bonus
      \def\padded@point@block{%
        \begingroup
          \@placepointstrue
          \bonuspoint@block
        \endgroup
      }%
    \else
      \def\padded@point@block{%
        \begingroup
          \@placepointstrue
          \point@block
        \endgroup
      }%
    \fi
    \if@pointsdropped
    \else
      \if@bonus
        \if@bonusqformat
          \ifx\ques@ref\@queslevel
          \else
            \setup@point@toks
          \fi
        \else
          \setup@point@toks
        \fi
      \else
        \if@qformat
          \ifx\ques@ref\@queslevel
          \else
            \setup@point@toks
          \fi
        \else
          \setup@point@toks
        \fi
      \fi
    \fi
    \global \MyIfPointsfalse
  }%<<<
\protected\long\def\myOargparse#1#2%>>>
  {%
    \@ifnextchar[{\myOargparse@{#2}}{#2{#1}}%
  }%<<<
\long\def\myOargparse@#1[#2]%>>>
  {%
    #1{#2}%
  }%<<<
\def\q@mark{\q@mark}
\newif\ifMyIfPoints
\newif\if@notfirstins
\protected\def\questionInsboxL%>>>
  {%
    \myOargparse{\q@mark}{\questionInsbox@a\InsertBoxL}%
  }%<<<
\protected\def\questionInsboxR%>>>
  {%
    \myOargparse{\q@mark}{\questionInsbox@a\InsertBoxR}%
  }%<<<
\protected\long\def\questionInsbox@a#1#2#3#4%>>>
  {%
    \myOargparse{0}{\questionInsbox@b{#1}{#2}{#3}{#4}}%
  }%<<<
\protected\long\def\questionInsbox@b#1#2#3#4#5%>>>
  {%
    \if@notfirstins
    \else
      \def\makelabel##1{\hss\llap{##1}}%
      \apptocmd\@itemlabel{\hskip\leftmargin}{}{}%
    \fi
    \ifx\q@mark#2%
      \question
    \else
      \global\MyIfPointstrue
      \patchcmd\@readpoints{\global\@placepointstrue}{\relax}{}{}%
      \question[{#2}]%
      \patchcmd\@readpoints{\relax}{\global\@placepointstrue}{}{}%
    \fi
    \if@notfirstins
    \else
      \patchcmd\@itemlabel{\hskip\leftmargin}{}{}{}%
      \let\makelabel\@mklab
      \@notfirstinstrue
    \fi
    \mbox{}%
    \vspace*{-\baselineskip}%
    \setlength{\leftskip}{\leftmargin}%
    \ifx\InsertBoxR#1%
      #1{#3}{\hskip-\leftmargin#4\hskip\leftmargin}[{#5}]%
    \else
      #1{\numexpr#3+1\relax}{#4}[{#5}]\par\hspace{\itemindent}%
    \fi
    \ifMyIfPoints
      \mypointshandling
    \fi
    \the\point@toks
    \ignorespaces
  }%<<<
\makeatother

\begin{document}
\begin{questions}
  \question[5]\lipsum[2]
  \questionInsboxR[5]{0}
    {%
      \parbox[t]{.3\linewidth}
        {%
          \centering
          \includegraphics[width=\linewidth]{example-image-a.png}%
          \captionof{figure}{This is A}%
        }%
    }[1]
    Hello, I want to wrap this figure in exam
    \lipsum[1]
  \questionInsboxL[5]{2}
    {%
      \parbox[t]{.3\linewidth}
        {%
          \centering
          \includegraphics[width=\linewidth]{example-image-a.png}%
          \captionof{figure}{This is A}%
        }%
    }[1]
    Hello, I want to wrap this figure in exam
    \lipsum[1]
\end{questions}
\end{document}

insira a descrição da imagem aqui

Responder2

Aqui está uma solução com captiono pacote de macro TeX simples insbox. Define um \InsertBoxRcomando, a ser inserido logo no início de um parágrafo, que recebe dois argumentos obrigatórios: o número de linhas intocadas antes de um id de caixa inserido, e a própria caixa inserida. Além disso, caso o TeX tenha um cálculo errado do número de linhas mais curtas necessárias, ele aceita como argumento opcional o número de linhas mais curtas suplementares que você deseja.

\documentclass[12pt]{exam}
\usepackage{graphicx,wrapfig,lipsum}
\usepackage[onehalfspacing]{setspace}
\usepackage{mwe}
\usepackage{caption}
\input{insbox}

\begin{document}

\begin{questions}
\question
Hello, I want to wrap this figure in exam. \par
\InsertBoxR {0}{\parbox{0.3\linewidth}{\includegraphics[width=\linewidth]{example-image-a.png}\captionof{figure}{This is A}}}[3]
\lipsum[2]\lipsum[1]
\end{questions}

\end{document} 

insira a descrição da imagem aqui

informação relacionada