Выровнять список, игнорируя отрицательный знак первого числа в элементах

Выровнять список, игнорируя отрицательный знак первого числа в элементах

В настоящее время я использую enumitem и создал среду для своих списков в документе. Она следующая:

\newenvironment{alternativas}[1][0]
{
    \begin{enumerate}[label={\Alph*)}, itemsep=#1cm, topsep = 0.5cm, wide=0pt,labelwidth=.5cm,leftmargin=!]
}
{
    \end{enumerate}
}

Я пытался выровнять элементы, игнорируя знак минуса, если элемент начинается с единицы. Изображения объяснят это гораздо лучше меня:

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

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

Я искал похожие вопросы, но нашел только людей с этой проблемой на столе, и решения с использованием выравнивания окружения и тому подобного. Я даже искал что-то, чтобы решить это в книгах по TeX (и случайно многому научился, делая это, ха-ха), но я не добился успеха.

Многие решения для этих похожих проблем также используют некоторую ручную настройку, например, использование \phantom в элементах без знака минус, чтобы интервал выглядел одинаковым (я добился желаемого результата, используя \hspace с отрицательным числом). Но я искал решение, которое автоматизирует это для меня, потому что я делюсь документами с менее опытными людьми и хочу, чтобы им было легко пользоваться. Большое спасибо!

решение1

Что я делаю, так это переопределяю \itemвнутри окружения, чтобы проверить первый токен \item(следуя необязательному аргументу). Если это токен -, я \mathllapего и затем продолжаю, в противном случае я просто набираю его напрямую.

\documentclass{article}
\usepackage{enumitem,mathtools}
\let\svitem\item
\newenvironment{alternativas}[1][0]
{
  \renewcommand\item[2][\relax]{%
    \ifx\relax##1\def\next{}\else\def\next{[##1]}\fi
    \ifx-##2\def\nnext{$\mathllap{##2}$}\else\def\nnext{##2}\fi
    \expandafter\svitem\next\nnext}
    \begin{enumerate}[label={\Alph*)}, itemsep=#1cm, topsep = 0.5cm, 
      wide=0pt, labelwidth=.5cm,leftmargin=!,labelsep=10pt]
}
{
    \end{enumerate}
}
\begin{document}
\begin{alternativas}
\item -1
\item 4
\item -5
\item 6
\end{alternativas}
\end{document}

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

ПРИЛОЖЕНИЕ

OP пояснил в комментариях, что все числа вводятся в математическом режиме (через лидирующий $). Однако не все элементы начинаются с math. Поэтому потребовались некоторые правки:

\documentclass{article}
\usepackage{enumitem,mathtools}
\let\svitem\item
\newenvironment{alternativas}[1][0]
{
  \renewcommand\item[3][\relax]{%
    \ifx\relax##1\def\next{}\else\def\next{[##1]}\fi
    \ifx$##2\ifx-##3\def\nnext{##2\mathllap{##3}}\else\def\nnext{##2##3}\fi
      \else\def\nnext{##2##3}\fi
    \expandafter\svitem\next\nnext}
    \begin{enumerate}[label={\Alph*)}, itemsep=#1cm, topsep = 0.5cm, 
      wide=0pt, labelwidth=.5cm,leftmargin=!,labelsep=10pt]
}
{
    \end{enumerate}
}
\begin{document}
\begin{alternativas}
\item $-1$
\item $4$
\item $-\frac{5}{7}$
\item $\frac{6}{11}$
\item text
\end{alternativas}
\end{document}

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

решение2

Вы можете загрузить mathtools(в данном случае загружать не нужно amsmath) его \mathllapкомандой и немного увеличить \labelsep:

\documentclass{article}

\usepackage{enumitem}
\usepackage{mathtools}
\newenvironment{alternativas}[1][0]
{
    \begin{enumerate}[label={\Alph*)}, itemsep=#1cm, topsep = 0.5cm, labelsep=6pt, wide=0pt,labelwidth=.5cm,leftmargin=!]
}
{
    \end{enumerate}
}

\begin{document}

 \begin{alternativas}
    \item $\mathllap{-}1 $
    \item $ 4 $
    \item $ \mathllap{-}5 $
    \item $ 6 $
    \end{alternativas}

\end{document} 

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

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