添加

添加

我想使用自定义\item元素和自定义标签创建自己的列表环境我的商品,它接受一个可选参数(2,7,6在我的例子中)。它应该是一个编号列表。我应该能够引用它。

这基本上就是我想要的:

建议的乳胶代码:

Look at \ref{a}, and \ref{b}
\begin{mylist}
\myitem[2] \label{a} lorum ipsum lorum ipsum
\myitem[7] lorum ipsum etc.
\myitem[6] \label{b} lorum ipsum etc.
\end{mylist}

输出应该是:

看看我的前缀-2-1,以及我的前缀-6-3
我的前缀-2-1 原罪 原罪
我的前缀-7-2 lorum ipsum等。
我的前缀-6-3 lorum ipsum等。

我是否应该进一步澄清一下这个问题?

到目前为止,在 Tom 和 egreg 的帮助下,我得到了以下代码:

\usepackage{enumitem}

\newlist{mylist}{enumerate}{1}
\setlist[mylist]{label*=RQ\arabic*:~,ref=RQ\arabic*}
\makeatletter
\newcommand\myitem[1][]{%
  \if\relax\detokenize{#1}\relax
    \item\relax
  \else
    \protected@edef\@currentlabel{RQ#1}%
    \item[RQ#1:~]
  \fi}
\makeatother

我现在所需要的只是标签引用能够按照我编辑的问题中所述的方式工作。

答案1

一种方法是让枚举项做些工作

\documentclass[a4paper]{article}
\usepackage{enumitem}

\newlist{mylist}{enumerate}{1}
\setlist[mylist]{label*=RQ\arabic*:~,ref=RQ\arabic*}
\makeatletter
\newcommand\myitem[1][]{%
  \if\relax\detokenize{#1}\relax
    \item\relax
  \else
    \protected@edef\@currentlabel{RQ#1}%
    \item[RQ#1:~]
  \fi}
\makeatother

\begin{document}
\begin{mylist}
\myitem\label{x} x
\myitem[3]\label{y} y
\myitem z
\end{mylist}
--\ref{x}--\ref{y}--
\end{document}

复杂的条件只是为了使引用正确\myitem[x]。可以添加一些其他代码来获取超链接。

查看枚举项有关如何更改其他列表参数(缩进、标签宽度等)的文档。

添加

要获得您建议的编号方案,请将代码更改为

\usepackage{enumitem}

\newlist{mylist*}{enumerate}{1}
\setlist[mylist*]{label=\mylistprefix-\mylistopt-\arabic*:~,
  ref=\mylistprefix-\mylistopt-\arabic*}
\makeatletter
\let\mylistopt\relax % to keep enumitem happy
\newcommand\myitem[1][]{%
  \if\relax\detokenize{#1}\relax
    \def\mylistopt{0}% no optional argument to \myitem
  \else
    \def\mylistopt{#1}% optional argument to \myitem
  \fi
    \item\relax}
\makeatother
\newenvironment{mylist}[1][myPrefix]
  {\def\mylistprefix{#1}\begin{mylist*}}
  {\end{mylist*}}

你称之为

\begin{mylist}
\myitem[2] \label{a} lorum ipsum lorum ipsum
\myitem[7] lorum ipsum etc.
\myitem[6] \label{b} lorum ipsum etc.
\myitem ll
\end{mylist}

或者

\begin{mylist}[RQ]
\myitem[2] \label{a} lorum ipsum lorum ipsum
\myitem[7] lorum ipsum etc.
\myitem[6] \label{b} lorum ipsum etc.
\myitem ll
\end{mylist}

RQ作为前缀。

不同的实现

假设您希望项目的编号在整个文档中都是唯一的,但您还希望在某个时候决定从哪里开始编号。键值接口更合适:

\documentclass[a4paper]{article}
\usepackage{enumitem,keyval}
\makeatletter
\define@key{vort3xlist}{prefix}{\def\mylistprefix{#1}}
\define@key{vort3xlist}{start}{\setcounter{mylistcnt}{#1}}
\makeatother

\newcounter{mylistcnt}
\newlist{mylist*}{enumerate}{1}
\setlist[mylist*]{label=\mylistprefix-\mylistopt-\arabic{mylistcnt}:~,
  ref=\mylistprefix-\mylistopt-\arabic{mylistcnt}}
\makeatletter
\let\mylistopt\relax
\newcommand\myitem[1][]{%
  \refstepcounter{mylistcnt}%
  \if\relax\detokenize{#1}\relax
    \def\mylistopt{0}%
  \else
    \def\mylistopt{#1}%
  \fi
    \item\relax}
\makeatother
\newenvironment{mylist}[1][]
  {\setkeys{vort3xlist}{prefix=RQ}%change here your default prefix
   \setkeys{vort3xlist}{#1}%
   \begin{mylist*}}
  {\end{mylist*}}

\begin{document}
Look at \ref{a}, and \ref{b}
\begin{mylist}[start=3,prefix=XYZ]
\myitem[2] \label{a} lorum ipsum lorum ipsum
\myitem[7] lorum ipsum etc.
\myitem[6] \label{b} lorum ipsum etc.
\myitem \label{x} ll
\end{mylist}
Here's a second list
\begin{mylist}
\myitem[2] \label{c} lorum ipsum lorum ipsum
\myitem[7] lorum ipsum etc.
\myitem[6] \label{d} lorum ipsum etc.
\myitem \label{y} ll
\end{mylist}
\ref{c}, \ref{d}

\ref{x} and \ref{y}
\end{document}

接受的密钥是prefixstart,正如您在第一个中看到的mylist

答案2

您可以非常轻松地定义自己的列表。将其放入环境中,定义自定义项目。下面是示例(您不需要该geometry包,我只是不想浪费太多空间):

\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}

\newcounter{itemnumber}

\newenvironment{mylist}[1]{% Prefix
\setcounter{itemnumber}{0}%
\begin{list}{\textbf{#1}}{}%
}{\end{list}}

\newcommand{\myentry}[2]{% Number, Text
\stepcounter{itemnumber}%
\item \textit{#1}: \theitemnumber\ #2%
}

\begin{document}

\begin{mylist}{myPrefix}
    \myentry{2}{lorem ipsum adin}
    \myentry{7}{lorem ipsum dwa}
    \myentry{6}{lorem ipsum tri}
\end{mylist}

\end{document}

在此处输入图片描述


编辑1:对于可参考的条目,您可以使用hyperrefshyperlinkhypertarget

\documentclass[parskip]{scrartcl}
\usepackage[margin=15mm]{geometry}
\usepackage{lipsum}
\usepackage[colorlinks]{hyperref}

\newcounter{itemnumber}

\newenvironment{mylist}[1]{% Prefix
\setcounter{itemnumber}{0}%
\begin{list}{\textbf{#1}}{}%
}{\end{list}}

\newcommand{\myentry}[2]{% Number, Text
\stepcounter{itemnumber}%
\item \textit{#1}: \theitemnumber\ #2%
}

\newcommand{\mylinkentry}[3]{% Number, Text, linklabel
\stepcounter{itemnumber}%
\item \textit{#1}: \theitemnumber\ \hypertarget{#3}{#2}%
}

\begin{document}

\hrule

\begin{mylist}{myPrefix}
    \myentry{2}{lorem ipsum adin}
    \myentry{7}{lorem ipsum dwa}
    \myentry{6}{lorem ipsum tri}
\end{mylist}

\hrule

\begin{mylist}{some numbers}
    \mylinkentry{13}{bad luck}{item.one}
    \mylinkentry{665}{neighbour of the beast}{item.two}
    \mylinkentry{1337}{deep magic wizard}{item.three}
\end{mylist}

\hrule

Many people believe number \hyperlink{item.one}{13} to be bad luck.\\
The code was still blinking on th screen: \hyperlink{item.two}{665...}\\
Some people just got \hyperlink{item.three}{a lot more skill} than others.

\end{document}

在此处输入图片描述

相关内容