Espaço vertical indesejado com lista enumitem no ambiente de exercícios xsim

Espaço vertical indesejado com lista enumitem no ambiente de exercícios xsim

Estou usando o pacote xsim para criar conjuntos de exercícios. Alguns exercícios começam imediatamente com as partes (a), (b) etc. e sem texto introdutório. Usei outras respostas daqui para configurar uma lista enumitem com topsep = 0pt e vspace negativo para o 'antes'. Isto parece bom na maioria dos casos, exceto no exercício 2 neste exemplo, onde o sobrescrito parece afetar o alinhamento vertical.

Existe uma maneira melhor de configurar a lista de enumitem para que a parte (a) sempre se alinhe corretamente com o número do exercício?

\documentclass[a4paper,11pt]{memoir}
\usepackage[T1]{fontenc} 
\usepackage[defaultsans]{opensans}
\usepackage{newtxtext,newtxmath}

\setlength{\parskip}{0.6em}
\setlength{\parindent}{0pt}

\usepackage{xsim}

\DeclareExerciseEnvironmentTemplate{margin}  % simulate margin-nr style from exsheets
{%
\par\vspace{\baselineskip}
\Needspace*{2\baselineskip}
\noindent
\llap{%
\smash{%
\tabular[t]{@{}r@{}}
\sffamily\textbf{\GetExerciseProperty{counter}\,}
\endtabular
} % notice the space
}%
}
{}

\xsimsetup{
    exercise/template = margin,
    solution/template = margin
}

\usepackage{enumitem}
\newlist{exampartsnoskip}{enumerate}{2}
\setlist[exampartsnoskip]{topsep=0pt,before={\vspace*{-1.85em}},label={(\alph*)},itemsep=0.1em,leftmargin=\oddsidemargin}
\setlist[exampartsnoskip,1]{label=(\alph*)}


\begin{document}

\begin{exercise}
\begin{exampartsnoskip}
    \item First
    \item Second
\end{exampartsnoskip}
\end{exercise}

\begin{exercise}
\begin{exampartsnoskip}
\item Evaluate $\left(36^\frac12+16^\frac14\right)^\frac13$
\item Second
\end{exampartsnoskip}
\end{exercise}

\begin{exercise}
\begin{exampartsnoskip}
    \item $\dfrac{x}{\dfrac{1}{x+1}}$
    \item Second
\end{exampartsnoskip}
\end{exercise}

\end{document}

Captura de tela do problema de alinhamento no exercício 2

Responder1

Talvez implemente o marginmodelo com trivlist:

\documentclass[a4paper,11pt]{memoir}
\usepackage[T1]{fontenc} 
\usepackage[defaultsans]{opensans}
\usepackage{newtxtext,newtxmath}

\setlength{\parskip}{0.6em}
\setlength{\parindent}{0pt}

\usepackage{showframe}

\usepackage{xsim}

\DeclareExerciseEnvironmentTemplate{margin}{%
  \trivlist
  \item[\llap{\sffamily\textbf{\GetExerciseProperty{counter}}}]\relax
}
{\endtrivlist}

\xsimsetup{
  exercise/template = margin,
  solution/template = margin
}

\usepackage{enumitem}
\newlist{examparts}{enumerate}{2}
\setlist[examparts]{
  topsep=0pt,
  % before={\vspace*{-1.85\baselineskip}},
  label={(\alph*)},
  itemsep=0.1em,
  leftmargin=\oddsidemargin
}
\setlist[examparts,1]{label=(\alph*)}

\begin{document}

\begin{exercise}
  \begin{examparts}
    \item First
    \item Second
  \end{examparts}
\end{exercise}

\begin{exercise}
  \begin{examparts}
    \item Evaluate $\left(36^\frac12+16^\frac14\right)^\frac13$
    \item Second
  \end{examparts}
\end{exercise}

\begin{exercise}
  \begin{examparts}
    \item $\dfrac{x}{\dfrac{1}{x+1}}$
    \item Second
  \end{examparts}
\end{exercise}

\end{document}

insira a descrição da imagem aqui

Responder2

insira a descrição da imagem aqui

Se você quiser que a altura superdimensionada da expressão interna afete a posição do número do rótulo externo, será necessário atrasar a configuração desse número e, em seguida, fixá-lo no rótulo interno. O LaTeX faz algo semelhante por padrão para listas aninhadas, mas aqui eu faço isso manualmente.

\documentclass[a4paper,11pt]{memoir}
\usepackage[T1]{fontenc} 
\usepackage[defaultsans]{opensans}
\usepackage{newtxtext,newtxmath}

\setlength{\parskip}{0.6em}
\setlength{\parindent}{0pt}

\usepackage{xsim}

\DeclareExerciseEnvironmentTemplate{margin}  % simulate margin-nr style from exsheets
{%
\par\vspace{\baselineskip}
\Needspace*{2\baselineskip}
\protected\gdef\exno{\llap{%
\sffamily\textbf{\GetExerciseProperty{counter}\,} }% notice the space
\gdef\exno{}}%
}
{}

\xsimsetup{
    exercise/template = margin,
    solution/template = margin
}

\usepackage{enumitem}
\newlist{exampartsnoskip}{enumerate}{2}
\setlist[exampartsnoskip]{topsep=0pt,before={\vspace*{-1.85em}},label={(\alph*)},itemsep=0.1em,leftmargin=\oddsidemargin}
\setlist[exampartsnoskip,1]{label=\exno(\alph*)}


\begin{document}

\begin{exercise}
\begin{exampartsnoskip}
    \item First
    \item Second
\end{exampartsnoskip}
\end{exercise}

\begin{exercise}
\begin{exampartsnoskip}
\item Evaluate $\left(36^\frac12+16^\frac14\right)^\frac13$
\item Second
\end{exampartsnoskip}
\end{exercise}

\begin{exercise}
\begin{exampartsnoskip}
    \item $\dfrac{x}{\dfrac{1}{x+1}}$
    \item Second
\end{exampartsnoskip}
\end{exercise}

\end{document}

informação relacionada