我在以自定义样式列举公理列表时遇到问题。
例如,如果我想写下一个函数必须满足的公理,才能使其成为环的同态,我更愿意称其为 (HOM1) 和 (HOM2)。我了解到,这可以通过以下方法实现:
A map $f$ between two rings $R$ and $S$ is called a ring homomomorphism if
they respect the algebraic structure in both of them. More precisely,
\begin{itemize}
\item[HOM1] $f(r_1+r_2)=f(r_1)+f(r_2)$
\item[HOM2] $f(r_1 \cdot r_2)=f(r_1) \cdot f(r_2)$
\end{itemize}
但问题是,我完全没有办法在证明中准确引用这些公理中的一个,而不必“粗暴地”输入(HOM1)来引用该公理。
这看起来有点像当有多个方程式时不知道如何引用它们,比如在对齐构造中。
任何为实现这一目标所提供的帮助都将受到感谢。
答案1
1. 自动生成的标签:
对于列表名称中存在简单模式的情况,可以使用正常enumerate
的包裹enumitem
如下:
\begin{enumerate}[label=HOM\arabic{*}, ref=(HOM\arabic{*}),leftmargin=5.0em]
\item $f(r_1+r_2)=f(r_1)+f(r_2)$ \label{item: FirstHom}
\item $f(r_1 \cdot r_2)=f(r_1) \cdot f(r_2)$
\end{enumerate}
然后通常\ref{item: FirstHom}
会产生所需的结果:
2. 手动指定标签(黑客警报):
更一般的情况是以任意方式手动指定标签,需要对格式进行微小更改,因为列表内容需要采用以下形式{}
:
\begin{MyDescription}[leftmargin=5.0em]
\item[GRP1]{$f(r_1+r_2)=f(r_1)+f(r_2)$ \label{item: FirstGrp}}
\item[RNG1]{$f(r_1 \cdot r_2)=f(r_1) \cdot f(r_2)$ \label{item: FirstRng}}
\end{MyDescription}
通过这种语法和一些技巧,使用\ref{item: FirstGrp}
和\ref{item: FirstRng}
可得到以下结果:
笔记:
- 需要运行两次才能解析引用。在第一次运行中,您将看到??,然后在第二个中,它将被实际的列表编号替换。
需要注意的是,在这个答案是关于 mdframed 和 item 之间的奇怪互动,egreg 提到
重新定义
\item
可能很危险,而且会产生不可预测的结果这正是我为手动指定的标签版本,因此如果在某些情况下失败,可能需要替代解决方案。
代码:
\documentclass{article}
\usepackage{enumitem}
\let\OldItem\item% remember the previous definition
\newcommand{\MyItem}[2][]{}%
\newenvironment{MyDescription}[1][]{%
\renewcommand{\item}[2][]{%
\begin{enumerate}[#1,label={##1},ref={(##1)}]%
\OldItem {##2}%
\end{enumerate}%
}%
}{%
}%
\begin{document}
\section{Auto Generated Labels}
\noindent
A map $f$ between two rings $R$ and $S$ is called a ring homomorphism if
they respect the algebraic structure in both of them. More precisely,
\begin{enumerate}[label=HOM\arabic{*}, ref=(HOM\arabic{*}),leftmargin=5.0em]
\item $f(r_1+r_2)=f(r_1)+f(r_2)$ \label{item: FirstHom}
\item $f(r_1 \cdot r_2)=f(r_1) \cdot f(r_2)$
\end{enumerate}
As can be seen in \ref{item: FirstHom} we conclude \ldots
\section{Manually Specified Labels}
A map $f$ between two rings $R$ and $S$ is called a ring homomorphism if
they respect the algebraic structure in both of them. More precisely,
\begin{MyDescription}[leftmargin=5.0em]
\item[GRP1]{$f(r_1+r_2)=f(r_1)+f(r_2)$ \label{item: FirstGrp}}
\item[RNG1]{$f(r_1 \cdot r_2)=f(r_1) \cdot f(r_2)$ \label{item: FirstRng}}
\end{MyDescription}
As can be seen in \ref{item: FirstGrp}, and \ref{item: FirstRng} we also conclude \ldots
\end{document}
答案2
这是对原始问题的评论中提到的最后一个编号方案的可能解决方案(它太长了,不能作为评论);我们的想法是使用包提供的series
方法:resume*
enumitem
\documentclass{article}
\usepackage{enumitem}
\begin{document}
\begin{enumerate}[leftmargin=1.3cm,label=Grp\arabic*,ref=(Grp\arabic*),series=group]
\item $a + (b + c) = (a + b) + c$. \label{ite:gras}
\end{enumerate}
\begin{enumerate}[leftmargin=1.3cm,label=Rng\arabic*,ref=(Rng\arabic*),series=ring]
\item $a + (b + c) = (a + b) + c$. \label{ite:rnas}
\end{enumerate}
\begin{enumerate}[leftmargin=1.3cm,label=Fld\arabic*,ref=(Fld\arabic*),series=field]
\item $a + (b + c) = (a + b) + c$. \label{ite:flas}
\end{enumerate}
And now some text...
\begin{enumerate}[resume*=group]
\item $a + e = e + a = a$. \label{ite:grne}
\end{enumerate}
\begin{enumerate}[resume*=ring]
\item $a + e = e + a = a$. \label{ite:rnne}
\end{enumerate}
\begin{enumerate}[resume*=field]
\item $a + e = e + a = a$. \label{ite:flne}
\end{enumerate}
And once again some text...
\begin{enumerate}[resume*=group]
\item $a + b = b + a = e$. \label{ite:grin}
\end{enumerate}
\begin{enumerate}[resume*=ring]
\item $a + b = b + a = e$. \label{ite:rnin}
\end{enumerate}
\begin{enumerate}[resume*=field]
\item $a + b = b + a = e$. \label{ite:flin}
\end{enumerate}
And some references: \ref{ite:rnas}, \ref{ite:flne}, and \ref{ite:grin}...
\end{document}
答案3
我是一名工程师,不是数学家,但我认为下面的语法更简洁,可以用enumitem
处理群、域和同态内容的一致缩进:
\documentclass{article}
\usepackage[thref]{ntheorem}
\let\hom\relax % since hom defined in amsmath (http://tex.stackexchange.com/a/34927/3345)
\makeatletter
\newtheoremstyle{homstyle}% (http://tex.stackexchange.com/a/36563/3345)
{\item[\hskip\labelsep \theorem@headerfont ##1 ##2\theorem@separator{}]}%
{\item[\hskip\labelsep \theorem@headerfont ##1 ##2\theorem@separator{} (##3)]}
\newtheoremstyle{grpstyle}%
{\item[\hskip\labelsep \theorem@headerfont ##1 ##2\theorem@separator{}]}%
{\item[\hskip\labelsep \theorem@headerfont ##1 ##2\theorem@separator{} (##3)]}
\newtheoremstyle{fldstyle}%
{\item[\hskip\labelsep \theorem@headerfont ##1 ##2\theorem@separator{}]}%
{\item[\hskip\labelsep \theorem@headerfont ##1 ##2\theorem@separator{} (##3)]}
\makeatother
\theoremstyle{homstyle} \newtheorem{hom}{HOM}
\theoremstyle{grpstyle} \newtheorem{grp}{GRP}
\theoremstyle{fldstyle} \newtheorem{fld}{FLD}
\begin{document}
A map $f$ between two rings $R$ and $S$ is called a ring homomomorphism if
they respect the algebraic structure in both of them. More precisely,
\begin{hom}
$f(r_1+r_2)=f(r_1)+f(r_2)$ \label{hom:first}
\end{hom}
\begin{hom}
$f(r_1 \cdot r_2)=f(r_1) \cdot f(r_2)$ \label{hom:second}
\end{hom}
As seen in \thref{hom:first} and \thref{hom:second}, \ldots{}
Futhermore, we can define groups and fields, subjects unfamiliar to most engineers as
\begin{grp}
$1+e^{i \pi}=0$
\end{grp}
\begin{grp}
$\sin^2\theta + \cos^2 \theta = 1$
\end{grp}
\begin{fld}
$3 \approx \pi$
\end{fld}
\end{document}
有一件事我还没搞清楚,那就是如何消除\thref
命令中标签和数字之间的空格。不过,在标签中删除它是没有问题的。
答案4
手册enumitem
建议我采用以下解决方案。它仍然有点儿像黑客,并且需要用户提供枚举的所有标签,所以我想它仍然需要一些调整。
\documentclass{article}
\usepackage{enumitem}
\makeatletter
\def\myEnumCounter#1{\expandafter\@myEnumCounter\csname c@#1\endcsname}
\def\@myEnumCounter#1{\ifcase#1\or Grp1\or Rng1\or Fld1\fi}
\makeatother
% In the next line, Grp1 has to be replaced by the widest label in the enumeration.
% An alternative syntax is :
% \AddEnumerateCounter*{\myEnumCounter}{\@myEnumCounter}{1}
% which means the widest label is the 1st one.
\AddEnumerateCounter{\myEnumCounter}{\@myEnumCounter}{Grp1}
\begin{document}
\begin{enumerate}[label=\textbf{\myEnumCounter*.},ref=\myEnumCounter*]
\item \label{item:1} Group equation
\item \label{item:2} Ring equation
\item \label{item:3} Field equation
\end{enumerate}
\noindent References : \ref{item:1}, \ref{item:2} and \ref{item:3}.
\end{document}
如果计数器比较自然,即使没有方案,它也能解决问题。但是,在这里和许多其他示例中,情况可能并非如此,并且上面提出的解决方案对于一次性使用的环境应该更为方便。