![使用自定义编号制作自己的列表](https://linux22.com/image/345657/%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BC%96%E5%8F%B7%E5%88%B6%E4%BD%9C%E8%87%AA%E5%B7%B1%E7%9A%84%E5%88%97%E8%A1%A8.png)
我正在制作自己的列表,类似于枚举。我希望编号向右对齐,因此所有内容看起来都像这样:
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
}