提问于:
浏览数:
4675
用 `pifont` 宏包制作带圈数字列表,发现交叉引用出来的带圈数字有问题
```tex
\documentclass{article}
\usepackage{pifont}
\def\theenumi{\ding{\numexpr171+\value{enumi}}}
\def\labelenumi{\theenumi}
\usepackage{hyperref}
\begin{document}
\begin{enumerate}
\item xxx\label{1}
\item xxx\label{2}
\item xxx\label{3}
\end{enumerate}
\ref{1}\ref{2}\ref{3}
\end{document}
```
表现为
![](https://pics.latexstudio.net/data/images/202002/044e1394464ee53.png)
交叉引用的锚点是对的,可以跳转到正确的位置,但是表现的数字不对
4 回答
0
参考:https://tex.stackexchange.com/questions/50446/enumerated-list-with-blue-circles-and-number-inside-it
而后得到:
```tex
\documentclass{article}
\usepackage{pifont}
\usepackage{enumitem}
\usepackage{hyperref}
\begin{document}
\begin{enumerate}[label=\protect{\ding{\numexpr171+\arabic*}}]
\item xxx\label{1}
\item xxx\label{2}
\item xxx\label{3}
\end{enumerate}
\ref{1}\ref{2}\ref{3}
\end{document}
```
-
非常感谢! – sikouhjw 2020-02-25 17:21 回复
1
核心问题是,`\ding` 是脆弱命令。解决方案是把它变健壮(robust):
- 局部变健壮,(在 `\setlist` 中)使用 `\protect\ding` 代替 `\ding`,不需要额外的大括号
- 全局变健壮,(在 `pifont` 宏包加载后、第一次使用有序列表之前)增加 `\MakeRobust\ding`。
0
将啸行的答案全局化
```tex
\documentclass{article}
\usepackage{pifont,enumitem}
\setlist{label=\protect{\ding{\numexpr171+\arabic*}}}
\usepackage{hyperref}
\begin{document}
\begin{enumerate}
\item xxx\label{1}
\item xxx\label{2}
\item xxx\label{3}
\end{enumerate}
\ref{1}\ref{2}\ref{3}
\end{document}
```
0
带圈数字的话有个包[circledsteps](http://texdoc.net/texmf-dist/doc/latex/circledsteps/circledsteps-manual.pdf "circledsteps")
```tex
\documentclass{article}
\usepackage{tikz}
\usepackage{enumitem}
\usepackage{circledsteps}
\usepackage{hyperref}
\begin{document}
\tikzset{/csteps/inner color=blue}
\tikzset{/csteps/outer color=green}
\tikzset{/csteps/fill color=yellow}
\begin{enumerate}[label={\Circled{\arabic*}}]
\item xxx\label{1}
\item xxx\label{2}
\item xxx\label{3}
\end{enumerate}
\ref{1}\ref{2}\ref{3}
\end{document}
```
你的回答
请登录后回答
你的回答将会帮助更多人,请务必认真回答问题。