элемент списка многострочный ( `\newline` внутри метки элемента ?)

элемент списка многострочный ( `\newline` внутри метки элемента ?)

Как сделать многострочную метку элемента?

Пример

\documentclass[a4paper,10pt]{article}
\usepackage{lipsum}
\begin{document}
\begin{itemize}
\item[Great Item] \lipsum[1]
\end{itemize}
\end{document}

Я бы с удовольствием сделал

\item[Great \newline Item] \lipsum[1]

Но у меня не работает.

Ожидаемый результат — первые строки метки litem и содержимого элемента выровнены:

Great   Lorem ipsum dolor sit amet,
Item    consectetuer adipiscing elit.
        Ut purus elit, ver...

Если говорить точнее, я использую mydescсреду, представленную наhttps://tex.stackexchange.com/a/23569/7128. Я бы хотел, чтобы это работало вместе. Вышеприведенный пример слишком упрощен. Вот более подробно:

\documentclass[a4paper,10pt]{article}
\usepackage{lipsum}
% mydesc thanks for https://tex.stackexchange.com/a/23569/7128
\newenvironment{mydesc}[1]
  {\list{}{\renewcommand\makelabel[1]{\it##1\hfil}%
     \settowidth\labelwidth{\makelabel{\it#1}}%
     \setlength\leftmargin{\dimexpr\labelwidth+\labelsep\relax}}}
  {\endlist}
\begin{document}
\begin{mydesc}{LongestItem}
\item[Great Item] \lipsum[1]
\end{mydesc}
\end{document}

решение1

LaTeX предлагает команду \shortstackдля подобных задач, поэтому ваше решение может выглядеть следующим образом:

\item[\smash{\shortstack[l]{Great\\Item}}] \lipsum[1]

К сожалению, \shortstackпо умолчанию он выровнен по нижнему краю, поэтому нам придется придумать вариант «сверху»:

\makeatletter
\gdef\tshortstack{\@ifnextchar[\@tshortstack{\@tshortstack[c]}}
\gdef\@tshortstack[#1]{%
  \leavevmode
  \vtop\bgroup
    \baselineskip-\p@\lineskip 3\p@
    \let\mb@l\hss\let\mb@r\hss
    \expandafter\let\csname mb@#1\endcsname\relax
    \let\\\@stackcr
    \@ishortstack}
\makeatother
\begin{document}
\begin{itemize}
\item[\smash{\tshortstack[l]{Great\\Item}}] \lipsum[1]
\end{itemize}

введите описание изображения здесь

Код для \tshortstackбыл просто скопирован из соответствующего кода в исходниках LaTeX. Если вы не хотите копировать так много кода, вы также можете использовать \patchcmd:

\documentclass[a4paper,10pt]{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\makeatletter
\gdef\tshortstack{\@ifnextchar[\@tshortstack{\@tshortstack[c]}}
\let\@tshortstack\@shortstack
\patchcmd\@tshortstack\vbox\vtop{}{}
\makeatother
\begin{document}
\begin{itemize}
\item[\smash{\tshortstack[l]{Great\\Item}}] \lipsum[1]
\end{itemize}
\end{document}

Связанный контент