5

I'm trying to set up a list environment for typesetting a problem set. I'd like to be able to input something like the following:

\begin{pset}
\item First solution.
\item[2.2] Second solution.
\end{pset}

and have it come out as:

Problem 1. First solution.
Problem 2 (2.2). Second solution

with the optional argument to \item being typeset in parentheses if it's present. I assume I should be able to \renewcommand{\makelabel} somehow, but I can't figure out how to do it. I can't get anything like the following to work:

\newcommand{\makepsetlabel}[1]{some if/then involving #1, checking if empty}
\newlist{pset}{enumerate}{1}
\setlist[pset]{
   before={\renewcommand\makelabel[1]{\makepsetlabel{##1}}
}

What's the right way?

5

I would use a different command instead of \item:

\documentclass{article}
\usepackage{enumitem}

\newlist{pset}{enumerate}{1}
\setlist[pset]{
  label=Problem \arabic*\protect\thispitem,
  ref=\arabic*,
  align=left
}
\newcommand{\pitem}[1][]{%
  \if\relax\detokenize{#1}\relax
    \def\thispitem{.}%
  \else
    \def\thispitem{ (#1).}%
  \fi
  \item}

\begin{document}

\begin{pset}
\pitem First
\pitem[2.2] Second
\end{pset}

\end{document}

In the label I add a command \thispitem (with \protect so enumitem doesn't interpret it when setting up the environment).

Then \pitem examines the presence of an optional argument and acts consequently: if none is specified, it just prints a period, otherwise a space, the parenthesized argument and the period.

enter image description here

  • Sounds like a good way to go -- thanks for the suggestion! – user25695 Feb 9 '13 at 13:31
1

One possibility is to grab the optional argument using your own command, so that \item does not see it.

\documentclass{article}
\newcommand\myitem[1][\relax]{\item\ifx#1\relax\else(#1)\fi}
\begin{document}
\begin{itemize}
\myitem abc
\myitem[2.1] def
\end{itemize}
\end{document}
  • The period will be in the wrong place. – egreg Feb 8 '13 at 23:07
  • @egreg --- Friday night is not the time to consider such details! – Ian Thompson Feb 8 '13 at 23:12
  • @IanThompson: I've added a deleted answer that could be used as a slight improvement(?) to your current definition. Grab some from it if you need it. – Werner Feb 8 '13 at 23:35

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.