Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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?

share|improve this question
    
Welcome to TeX.sx! –  egreg Feb 8 '13 at 22:59

2 Answers 2

up vote 4 down vote accepted

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

share|improve this answer
    
Sounds like a good way to go -- thanks for the suggestion! –  user25695 Feb 9 '13 at 13:31

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}
share|improve this answer
    
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

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.