Como associar um símbolo a uma lista

Como associar um símbolo a uma lista

Gostaria de associar um símbolo a um \itemizeambiente para que quando eu \refo utilizar imprima o símbolo. Gostaria também que o símbolo escolhido fosse impresso no meio do \itemizeambiente. Parece um pouco \tagno \equationambiente, mas recebo um erro de compilação quando tentei ...

\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{enumitem}
\usepackage{hyperref, nameref, cleveref}

\begin{document}

\begin{itemize} \tag{$\dagger$} \label{épée}

\item blalabla
\item blablabla
\item blablabla
\end{itemize}

blablabla cf \cref{épée}
\end{document}

Responder1

Seguindo a bela resposta de Werner emComo alguém pode se referir a uma parte de uma equação?, posso fazer funcionar com hyperref, mas não com cref. Talvez alguém que conheça o assunto crefpossa se adaptar (aqui, eu só \let \crefquero \ref).

O novo ambiente é myitemizee leva um argumento opcional, no qual o rótulo pode ser especificado com \ilabel. Claro, você deve definir antecipadamente todos os símbolos associados ao seu ambiente, como verá no meu preâmbulo.

\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{enumitem}
\usepackage{hyperref}
\usepackage{nameref}
%\usepackage{cleveref}
\let\cref\ref
\usepackage[nopar]{lipsum}
\makeatletter
\expandafter\def\csname mysym1\endcsname{\dag}
\expandafter\def\csname mysym2\endcsname{\ddag}
\expandafter\def\csname mysym3\endcsname{*}
\expandafter\def\csname mysym4\endcsname{\&}    
\newcounter{itnum}
\newenvironment{myitemize}[1][]%
  {\relax\par\stepcounter{itnum}#1\hfil[\csname mysym\theitnum\endcsname]\hfil\itemize}%
  {\enditemize\ignorespaces}
\AtBeginDocument{\let\i@label\label}% https://tex.stackexchange.com/q/9939/5764
\newcommand{\ilabel}[1]{\def\@currentlabel{\csname mysym\theitnum\endcsname}\i@label{#1}}
\makeatother
\begin{document}
\lipsum[4]

\begin{myitemize}[\ilabel{épée}]
\item blalabla
\item blablabla
\item blablabla
\end{myitemize}
\lipsum[4]
blablabla cf \cref{épée}
\begin{myitemize}[\ilabel{ref2}]
\item blalabla
\item blablabla
\item blablabla
\end{myitemize}
\lipsum[4]
blablabla cf \cref{ref2}
\end{document}

insira a descrição da imagem aqui


Para ajudar o usuário iniciante a aprender um pouco mais sobre o que é feito, estou ampliando a explicação.

\makeatletter...\makeatother- VerO que \makeatletter e \makeatother fazem?. Basicamente, @é um caractere restrito no código do usuário, mas seu uso em nomes de macros pode ser habilitado/desabilitado com estes dois comandos. Como grande parte do núcleo e dos pacotes do TeX usam esse @caractere em seus nomes de macro, a habilitação deve ser feita para permitir modificações nessas rotinas.

\expandafter\def\csname mysym1\endcsname- números não são permitidos em nomes de macro ao usar \def, então \def\mysym1{\dag}não vai funcionar, mas é isso que eu quero alcançar. O nome \csname mysym1\endcsnameé efetivamente equivalente a uma \mysym1sintaxe. No entanto, say \def\csname...redefiniria \csname, o que não quero fazer, e então \expandafterdiz "pular a próxima coisa (neste caso \def) e expandir o que se segue, a saber \csname. É efetivamente equivalente ao disallowed \def\mysym1{}, mas segue as regras.

\newcounter{itnum}e \stepcounter{itnum}- cria (zeros) e incrementa uma estrutura LaTeX chamada "contador", que é apenas um índice inteiro. O valor atual pode ser acessado (como uma string de texto) colocando-o \theantes do nome do contador, neste caso \theitnum.

\par- iniciar um novo parágrafo

\relax- não faça nada, mas ele não "se expande" e, portanto, algo que tenta expandir o código que leva a ele irá parar de se expandir quando chegar a \relax. Coloquei-o aqui, para que nada do que se seguiu pudesse acidentalmente ser tomado como parte do argumento opcional.

\hfilé cola extensível ( \hfillé uma versão mais elástica de \hfil). Ele pode esticar seu comprimento horizontal entre os itens à esquerda e à direita. Pense nisso como um elástico.

\@currentlabele \i@labelsão a forma como o LaTeX se refere internamente a um rótulo e como ele cria um novo. É o primeiro desses comandos que devo modificar para que esse método funcione. Então devo recorrer ao segundo deles, passando-lhe a "nova" definição de rótulo.

\AtBeginDocument{}- Diz "não faça isso até \begin{document}. A razão para isso é que hyperrefestou ocupado redefinindo coisas em todos os lugares e, portanto, não quero fazer isso até que hyperrefesteja totalmente concluído, fazendo as inicializações que deseja fazer.

\ilabel- Como um usuário não pode usar @caracteres em seu código normalmente, eu crio esta macro para invocar efetivamente \i@labelcom o rótulo redefinido corretamente.

informação relacionada