Cómo asociar un símbolo a una lista

Cómo asociar un símbolo a una lista

Me gustaría asociar un símbolo a un \itemizeentorno para que cuando \reflo use imprima el símbolo. También me gustaría imprimir el símbolo elegido en el medio del \itemizeentorno. Parece algo así como \tagen el \equationentorno, pero aparece un error de compilación cuando lo probé...

\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}

Respuesta1

Siguiendo la excelente respuesta de Werner en¿Cómo se puede hacer referencia a una parte de una ecuación?, puedo hacer que funcione con hyperref, pero no con cref. Quizás alguien que conozca las entrañas de crefpueda adaptarse (aquí, solo \let \creflo hago \ref).

El nuevo entorno es myitemizey requiere un argumento opcional, en el que se puede especificar la etiqueta con \ilabel. Por supuesto, debes definir todos los símbolos asociados con tu entorno de antemano, como verás en mi 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}

ingrese la descripción de la imagen aquí


Para ayudar al usuario novato a conocer un poco más de lo que se hace, amplié la explicación.

\makeatletter...\makeatother- Ver¿Qué hacen \makeatletter y \makeatother?. Básicamente, @es un carácter restringido en el código de usuario, pero su uso en nombres de macros se puede habilitar/deshabilitar con estos dos comandos. Dado que gran parte del núcleo y los paquetes de TeX utilizan este @carácter en sus nombres de macro, se debe realizar la habilitación para permitir modificaciones a esas rutinas.

\expandafter\def\csname mysym1\endcsname- Los números no están permitidos en los nombres de las macros cuando se usan \def, por lo que \def\mysym1{\dag}no funcionará, pero eso es lo que quiero lograr. El nombre \csname mysym1\endcsnamees efectivamente equivalente a una \mysym1sintaxis. Sin embargo, decir \def\csname...redefiniría \csname, lo cual no quiero hacer, por lo que \expandafterdice "omitir lo siguiente (en este caso \def) y expandir lo que sigue, es decir \csname, . Efectivamente es equivalente a no permitido \def\mysym1{}, pero sigue las reglas.

\newcounter{itnum}y \stepcounter{itnum}- crea (ceros) e incrementa una estructura LaTeX llamada "contador", que es solo un índice entero. Se puede acceder al valor actual (como una cadena de texto) colocándolo \theantes del nombre del contador, en este caso \theitnum.

\par- comenzar un nuevo párrafo

\relax- no haga nada, pero no se "expande", por lo que algo que intente expandir el código que conduce a él dejará de expandirse cuando llegue a \relax. Lo pongo aquí para que nada de lo que sigue pueda ser tomado accidentalmente como parte del argumento opcional.

\hfilEs pegamento estirable ( \hfilles una versión más elástica \hfil). Puede estirar su longitud horizontal entre los elementos a su izquierda y derecha. Piense en ello como una banda elástica.

\@currentlabely \i@labelson la forma en que LaTeX se refiere internamente a una etiqueta y cómo crea una nueva. Es el primero de estos comandos que debo modificar para que este método funcione. Luego debo invocar el segundo de ellos, pasándole la definición de etiqueta "nueva".

\AtBeginDocument{}- Dice "no hagas esto hasta" \begin{document}. La razón de esto es que hyperrefestoy ocupado redefiniendo cosas por todas partes, por lo que no quiero hacer esto hasta que hyperrefhaya terminado por completo con las inicializaciones que quiere hacer.

\ilabel- Dado que un usuario no puede usar @caracteres en su código normalmente, creo esta macro para invocarla de manera efectiva \i@labelcon la etiqueta redefinida correctamente.

información relacionada