Putting anything in front of \item in lists

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}

\begin{document}

   \begin{itemize}
    \item one
    \item \makebox[0pt][r]{some text\hspace{0.5cm}}two
    \item three
    \end{itemize}

\end{document}

enter image description here


Following up on the idea of @UlrikeFischer here is a way how to use it with a smooth user interface, i.e. the syntax is

\item[<mark>](<text before label>)

Note that both arguments are optional:

\begin{itemize}
  \item one
  \item[+] two
  \item(text) three
  \item[--](text) four
\end{itemize}

Moreover, I added a checker for the width of the text preceding the items label that throws out a warning if the text exceeds the length of one line. Preceding textes that are not too overlong, i.e. two lines, can still be handled by this solution.

showcase

Complete Code

\documentclass{article}
\usepackage{lipsum}

\makeatletter
\let\ltx@item\item
\def\item{\kernel@ifnextchar[{\item@}{\item@[\@itemlabel]}}
\def\item@[#1]{\kernel@ifnextchar({\item@@[#1]}{\item@@[#1]()}}
\def\item@@[#1](#2){\ltx@item[#1]\itemc@mment{#2}\ignorespaces}
\def\itemc@mment#1{%
  \@tempdima\dimexpr\oddsidemargin+\hoffset+\itemindent+1in\relax
  \setbox0\hbox{\ignorespaces#1}%
  \ifdim\wd0>\@tempdima
    \@latex@warning{Overfull item comment
      (\the\dimexpr\wd0-\@tempdima\relax)}\fi
  \ifdim\wd0>\z@
    \hspace{-.67em}
    \makebox[\z@][r]{%
      \smash{\parbox[t]{\dimexpr\@tempdima-.175cm\relax}{%
        \setlength\parindent\z@
        \addtolength\baselineskip{-.33em}
        \ifdim\wd0<\@tempdima\hspace{0pt plus 1fill}\fi#1}}
      \hspace{.175cm}
    }
  \fi
}
\makeatother

\begin{document}
\begin{itemize}
  \item one
  \item[+] two
  \item(text) three
  \item[--](text) four
  \item(text text text text text text text) five
  \item six
\end{itemize}

\begin{itemize}
  \setlength\itemindent{-1in}
  \item one
  \item[+] two
  \item(text) three
  \item[--](text) four
  \item(text text text text text text text) five
  \item six
\end{itemize}
\end{document}

Addendum

Note that this solution supports nested lists too.

\begin{itemize}
  \item first
    \begin{itemize}
      \item sub one
      \item[:] sub two
      \item(text) sub three
      \item[:](text) sub four
    \end{itemize}
  \item[+] two
  \item(text) three
  \item[--](text) four
  \item(text text text text text text text) five
  \item six
\end{itemize}

output2


If you're only wanting this at the "root" level of an itemize, you can use \textbullet, otherwise use \itemmark (which adapts to the level of itemize).

The solution below relies on the fact that you can specify an \item[<mark>] by using the optional argument <mark>:

enter image description here

\documentclass{article}

\makeatletter
\newcommand{\itemmark}{\expandafter\csname labelitem\romannumeral\the\@itemdepth\endcsname}
\makeatother

\begin{document}

\begin{itemize}
  \item one
  \item[some text~1\ \textbullet] two 
  \item[some text~2\ \itemmark] three
  \begin{itemize}
    \item four
    \item[some text~3\ \itemmark] five
  \end{itemize}
  \item six
\end{itemize}

\end{document}

Tags:

Itemize