Puedo envolver en ARTÍCULO, pero no en EXAMEN. ¿Cómo terminar el EXAMEN? (Pregunta adicional-si eres un maestro de LaTeX-.- ¿Cuál es el paquete más adecuado y fácil para hacer este tipo de cosas?)
Puedo envolver una figura en un documento ARTICULO
con este codigo
\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}
PERO me gustaría envolver imágenes en documentos de EXAMEN, y este código no proporciona la figura envuelta:
\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}
**
EDITADO (24/02/2019) Después de probar la solución Skillmon, tengo un nuevo problema con las listas (enumerar) en las preguntas.
**
Con el código (solo agregando itemize en la pregunta con la 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}
La solución, no la mejor pero... sobre la marcha he tecleado es:
\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}
EDITAR (25/02/2019) después de EDITAR 3 de Skillmon Admiro tu conocimiento de la programación LaTeX. ¡¡Es fantástico!!
La solución es perfecta para texto normal, pero cuando usa listas (enumerar, detallar,...) el problema persiste. Después de leer los últimos comentarios (24/02/2019) de Skillmon, decido simular las listas en texto normal. Con \ a) respuesta 1 respuesta 1 respuesta 1 respuesta 1 respuesta 1 respuesta 1 respuesta 1 respuesta 1 respuesta 1 respuesta 1 respuesta 1 respuesta 1\ b) respuesta 2 respuesta 2 respuesta 2 respuesta 2 respuesta 2 respuesta 2 respuesta 2 respuesta 2 respuesta 2 respuesta 2 respuesta 2 respuesta 2\
¡LaTeX es tan hermoso, tan complicado!
Esperando esta opción (¡soy optimista, sí! :-)) en la clase de examen en el futuro... A veces usaré tus soluciones.
Solo falla en la parte inferior de la página, hasta donde puedo ver, y cuando usas algún \questionInsboxL[5]{2} con una página casi en blanco entre preguntas.
¡GRACIAS POR TODAS SUS SOLUCIONES Y ESFUERZOS!
GRACIAS SKILLMON
Respuesta1
wrapfig
no funciona en listas y questions
es solo otra versión de una lista. La siguiente es una reimplementación rápida y sucia dehttps://tex.stackexchange.com/a/453624/117050trabajar con enumerate
listas similares en lugar de con itemize
. Se utiliza insbox
igual que la respuesta de @Bernard, pero no debería requerir un párrafo manual. Solo implementa el código para incluirlo dentro de una pregunta, no dentro de la siguiente también.
EDITAR:Ahora debería ser compatible con exam
el sistema de puntos, pero no lo probé a fondo. Podrías regresar y quejarte si no funciona.
EDITAR2:Se simplificó la interfaz para que se parezca más a la de \InsertBoxR
, el nombre de la nueva macro es \questionInsboxR
y requiere un argumento opcional, dos obligatorios y un segundo opcional. El primer argumento opcional es como el de \question
, los dos argumentos obligatorios y el siguiente opcional son como los de \InsertBoxR
.
EDITAR3:Se agregó \questionInsboxL
un comportamiento fijo de múltiples \questionInsboxL/R
usos dentro de un questions
entorno.
\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}
Respuesta2
Aquí hay una solución con caption
el paquete de macros TeX simple insbox
. Define un \InsertBoxR
comando, que se insertará al principio de un párrafo, que toma dos argumentos obligatorios: el número de líneas intactas antes de insertar una identificación de cuadro y el cuadro insertado en sí. Además, en caso de que TeX tenga un cálculo incorrecto del número de líneas más cortas necesarias, acepta como argumento opcional el número de líneas más cortas suplementarias que desee.
\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}