
EDITAR: En resumen, la respuesta realmente resultó elegante y sencilla. ¡Gracias a todas las respuestas a continuación!
\usepackage{etoolbox}
%...
\renewcommand\questionshook{\preto{\question}{\large\bfseries}}
% If we don't want the question's parts to be huge as well!
%\renewcommand\partshook{\normalsize\normalfont}
En breve, quiero generar una clase de documento de hoja de examen personalizada basada en elexam
clasepara utilizar en un grupo de compañeros. Para ello, quiero redefinir el \question
comando predeterminado para aplicar algún formato personalizado.
Supongamos que quiero que la \question
sección predeterminada sea grande y en negrita. Lo que estoy haciendo ahora es lo siguiente:
\newcommand\lquestion{\large\bfseries\question}
Entonces, para poder usar mi formato personalizado, tengo que escribir lo siguiente en mis documentos:
\begin{lquestion}
A large and bold question: what is the mass of the sun?
\end{lquestion}
(He leído que usar comandos como entornos está bien en LaTeX, pero corrígeme si eso esconde algunas piedras submarinas).
¿Cuál sería la mejor manera de redefinir el question
comando, que proviene de exam.cls
, como un entorno para no tener que anteponer esa bonificación l
al principio del entorno y poder usar el nombre contenido predeterminado question
en su lugar?
EDITAR: Un ejemplo de trabajo mínimo:
\documentclass{exam}
\usepackage[utf8]{inputenc}
\title{MWE}
\author{John Doe}
\date{November 2020}
%print solutions by default (for MWE's sake)
\printanswers
% do not put a box/frame around printed solutions
\unframedsolutions
\begin{document}
\maketitle
\begin{questions}
%this is basically what I want the result to look like:
{\large\bfseries
\question My large and bold question:
\begin{parts}
\part First part
\part Second part
\end{parts}
}
%but instead of this rather inconvenient form, I want to define an environment {question} with the same effect and use it like:
%
% \begin{question}
% My large and bold question:
% \begin{parts}
% \part First part
% \part Second part
% \end{parts}
% \end{question}
\begin{solution}
My general solution prerequisite.
\begin{parts}
\part My first part solution
\part My second part solution
\end{parts}
\end{solution}
\end{questions}
\end{document}
La \question
definición de se puede encontrar en la línea 2845 enexam.cls
dentro del questions
ambiente:
\newenvironment{questions}{%
%.... lots of code here
\def\question{%
\@bonusfalse
\def\thequestiontitle{\csname p@question\endcsname
\csname thequestion\endcsname}%
\process@question
}%
%.... lots of other code here
%and waaaaay down on line 3143
}% End of the second argument of \newenvironment{questions}
¡Gracias de antemano!
Respuesta1
Parece que ya has descubierto que puedes usar un comando como entorno, por lo que tu pregunta es realmente "¿cómo puedo redefinir el question
comando para que tenga \large\bfseries
al principio?". El problema que has descubierto es que el questions
entorno define el \question
comando. En cuyo caso, creo que su ejemplo funciona con
\usepackage{etoolbox}
\appto{\questions}{%
\preto{\question}{\large\bfseries}%
\printanswers%
}
No estoy contento con la necesidad de tenerlo \printanswers
allí, pero de lo contrario las soluciones desaparecen. Por lo tanto, es posible que tengas que realizar un seguimiento de dos \printanswers
comandos diferentes.
En cuanto a la pregunta sobre el entorno: \begin{myenv}...\end{myenv}
se convierte en \begingroup\myenv ...\endmyenv\endgroup
(donde \endmyenv
no provocará un error si no existe). El resultado es que agrupa automáticamente su documento \large\bfseries
para que no altere el resto de su documento.
Respuesta2
En realidad, se pueden usar \questionshook
y para manejar cambios de formato \partshook
.\SolutionEmphasis
\documentclass{exam}
\usepackage[utf8]{inputenc}
\title{MWE}
\author{John Doe}
\date{November 2020}
%print solutions by default (for MWE's sake)
\printanswers
% do not put a box/frame around printed solutions
\unframedsolutions
\renewcommand\questionshook{\large\bfseries}
\renewcommand\partshook{\normalsize\normalfont}
\SolutionEmphasis{\normalsize\normalfont}
\begin{document}
\maketitle
\begin{questions}
\question %\begingroup ... \endgroup not needed
My large and bold question:
\begin{parts}
\part First part
\part Second part
\end{parts}
\begin{solution}
My general solution prerequisite.
\begin{parts}
\part My first part solution
\part My second part solution
\end{parts}
\end{solution}
\end{questions}
\end{document}
Respuesta3
La forma más básica de crear un entorno es utilizar \newenvironment{<name>}{<begin code>}{<end code>}
. Entonces, en su caso, esto sería simplemente. \newenvironment{\lquestion}{\large\bfseries\question}{}
Puede agregar cualquier otra cosa que desee al código inicial o final. El código inicial es lo que sucede en \begin{lquestion}
la etiqueta y el código final es lo que sucede en la \end{lquestion}
etiqueta. Por supuesto, hay formas más avanzadas de hacer esto, pero este es el método más simple y no hay necesidad de algo más complejo en este caso.