我已经改革了来自这答案。它会自动为特定行生成数字。请参阅此代码。
\documentclass{article}
\usepackage{lipsum}
\newcounter{mynumber}
\newcommand{\myno}[1][1]{\hfill\refstepcounter{mynumber}(\arabic{mynumber})\label{#1}}
\def\NewLLLLLast{\texttt{[\the\numexpr\value{mynumber}-4\relax]}\space}
\def\NewLLLLast{\texttt{[\the\numexpr\value{mynumber}-3\relax]}\space}
\def\NewLLLast{\texttt{[\the\numexpr\value{mynumber}-2\relax]}\space}
\def\NewLLast{\texttt{[\the\numexpr\value{mynumber}-1\relax]}\space}
\def\NewLast{\texttt{[\the\value{mynumber}]}\space}
\begin{document}
\lipsum[1] \myno\\
\lipsum[1] \myno[second]\\
\lipsum[1] \myno\\
\lipsum[1] \myno\\
\NewLLLLast is the first paragraph.\\
\NewLLLast is the second paragraph.\\
\NewLLast is the third paragraph.\\
\NewLast is the fourth paragraph.\\
In \ref{second} paragraph bla bla bla.
\end{document}
现在我想要一个从 1 重新开始编号的命令。假设命令是\restartnum
。每当我输入它时,下一个\myno
都应该生成 (1)。
答案1
使用\setcounter{mynumber}{0}
。
另一方面,您可以应用许多改进。
首先,如果文本最后位于页边距附近,则在右边距附加数字的代码将不起作用。我添加了一个有效的代码(请参阅https://tex.stackexchange.com/a/91564/4427):如果最后一行几乎已满,数字将移动到下一行,仍然与右边距对齐;使用您的代码,它将出现在左边距。
其次,不需要定义一堆命令并计算 L,只需使用一个参数。
\documentclass{article}
\usepackage{lipsum}
\newcounter{mynumber}
\newcommand{\myno}[1][]{%
\begingroup
\nobreak\hfill\penalty50\hskip1em\null\nobreak\hfill
\refstepcounter{mynumber}(\arabic{mynumber})%
\if\relax\detokenize{#1}\relax\else
\label{#1}%
\fi
\parfillskip=0pt \finalhyphendemerits=0 \par
\endgroup
}
\newcommand{\NewLast}[1]{%
\texttt{[\the\numexpr\value{mynumber}-#1+1\relax]}%
}
\newcommand{\resetmyno}{\setcounter{mynumber}{0}}
\begin{document}
\lipsum[1][1-3] \myno
\lipsum[1][1-3] \myno[second]
\lipsum[1][1-3] \myno
\lipsum[1][1-3] \myno
\NewLast{4} is the first paragraph.
\NewLast{3} is the second paragraph.
\NewLast{2} is the third paragraph.
\NewLast{1} is the fourth paragraph.
In \ref{second} paragraph bla bla bla.
\resetmyno
\lipsum[1][1-3] \myno
\lipsum[1][1-3] \myno
\end{document}