使用自定义编号制作自己的列表

使用自定义编号制作自己的列表

我正在制作自己的列表,类似于枚举。我希望编号向右对齐,因此所有内容看起来都像这样:

 1. Text
    Text
11. Text
    Text

我有时还想在自动输入数字后放置一个特殊符号,例如(这不起作用,但我希望这个想法很清楚):

\item la-la-la
\item[*] difficult la-la-la

所以我希望文档看起来像这样:

 1. la-la-la
2*. difficult la-la-la

问题是它看起来像:

 1. la-la-la
 *. difficult la-la-la

所以“2”消失了。

有什么解决办法吗?

我目前的代码(我正在使用 LuaLaTeX):

\documentclass[10pt]{extarticle}
\usepackage[top=0.5in, bottom=1.25in, left=1in, right=1in]{geometry}
\pagestyle{empty}

\usepackage{mathtools}
\usepackage{comment}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{skull}
\usetikzlibrary{shapes.geometric}
\usepackage{tabularx}
\setlength\tabcolsep{0pt}
\setlength{\columnsep}{1cm}
\usepackage{ragged2e}
\usepackage[russian]{babel}
\usepackage{mathptmx}
\usepackage{polyglossia}    
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Times New Roman}
\newfontfamily\cyrillicfont{Times New Roman}
\usepackage{mathrsfs}
\setmainlanguage{russian}
\usepackage{enumitem}
\usepackage{lipsum}


\newcounter{qcounter}
\newcommand{\TTT}[1]{#1:}

\newenvironment{questions}{
    \begin{list}{ 
        \hfill\bfseries\upshape\arabic{qcounter}.
    }{
        \renewcommand{\makelabel}{\TTT}%
        \usecounter{qcounter}
        \setlength{\labelwidth}{2em}
        \setlength{\leftmargin}{3em}
        \setlength{\labelsep}{1em}
        \setlength{\itemsep}{3pt}
        \setlength{\listparindent}{1em}
        \setlength{\parsep}{0pt}
        \setlength{\topsep}{6pt}
    } 
}{    
    \end{list}
}

\begin{document}
\lipsum[1]
    \begin{questions}
    \item \lipsum[1]
    \end{questions}
\end{document}

答案1

假设你不想嵌套这些环境,你可以使用枚举项使用命令打包:

\newlist{questions}{enumerate}{1}

这定义了一个questions行为类似于enumerate环境且具有1嵌套级别的环境(允许嵌套更改{1}以提供所需的嵌套级别,但您还必须\fakeitem在下面进行修改)。您可以使用以下命令设置环境的“属性”:

\setlist[questions]{
   label=\arabic*.,   % label format
   leftmargin=*,      % indent labels
   before=\let\item\fakeitem,
}

前两行我已经用注释解释了。该before=命令重新定义了\item命令为\fakeitem 仅有的在这个环境中。我们的想法是劫持\item它以使其执行您想要的操作。此环境的标签计数器是,questionsi因此我们需要\fakeitem接受一个可选参数,它应该添加到标签中,并且我们需要手动增加计数器:

\newcommand\fakeitem[1][\relax]{% argument defaults to \relax
   \refstepcounter{questionsi}%  increment label counter
   \realitem[\arabic{questionsi}#1.]}
}

\realitem是原始\item命令。

把这些放在一起就可以得到你想要的:

在此处输入图片描述

完整代码如下:

\documentclass{article}
\usepackage{enumitem}

\let\realitem\item% save a copy of the \item command
\newcommand\fakeitem[1][\relax]{% argument defaults to \relax=do nothing
   \refstepcounter{questionsi}
   \realitem[\arabic{questionsi}#1.]% make label <questioni>#1.
}

\newlist{questions}{enumerate}{1}% define a new enumerate environment
\setlist[questions]{% define properties of questions
   label=\arabic*., % label format
   leftmargin=*,    % indent labels
   before=\let\item\fakeitem, % change the \item command
}

\usepackage{lipsum}% for MWe only

\begin{document}

    \begin{questions}
       \item la-la-la
       \item[*] difficult la-la-la
       \item[$\dag$] \lipsum[1]
    \end{questions}

\end{document}

顺便说一句,使用枚举项:如果您希望所有questions环境使用相同的编号,那么您所要做的就是添加resume命令\setlist

\setlist[questions]{
   label=\arabic*.,   % label format
   leftmargin=*,      % indent labels
   before=\let\item\fakeitem,
   resume             % use continuous numbering for the questions environments
}

相关内容