So ordnen Sie einer Liste ein Symbol zu

So ordnen Sie einer Liste ein Symbol zu

Ich möchte ein Symbol einer Umgebung zuordnen \itemize, sodass bei Verwendung \refdas Symbol gedruckt wird. Ich möchte auch, dass das ausgewählte Symbol in der Mitte der \itemizeUmgebung gedruckt wird. Es sieht irgendwie wie ein Symbol \tagin der \equationUmgebung aus, aber ich erhalte einen Kompilierungsfehler, wenn ich es versuche ...

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

Antwort1

Nach Werners guter Antwort aufWie kann man sich auf einen Teil einer Gleichung beziehen?, ich kann es mit zum Laufen bringen hyperref, aber nicht mit cref. Vielleicht kann es jemand crefanpassen, der sich mit auskennt (hier, ich \let \crefmöchte nur \ref).

Die neue Umgebung ist myitemizeund nimmt ein optionales Argument an, in dem das Label mit angegeben werden kann \ilabel. Natürlich müssen Sie alle zugehörigen Symbole im Voraus mit Ihrer Umgebung definieren, wie Sie in meiner Präambel sehen werden.

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

Bildbeschreibung hier eingeben


Um dem unerfahrenen Benutzer zu helfen, etwas mehr darüber zu erfahren, was getan wird, erweitere ich die Erklärung.

\makeatletter...\makeatother- SehenWas machen \makeatletter und \makeatother?. Grundsätzlich @ist dies ein eingeschränktes Zeichen im Benutzercode, aber seine Verwendung in Makronamen kann mit diesen beiden Befehlen aktiviert/deaktiviert werden. Da ein Großteil des TeX-Kerns und der TeX-Pakete dieses @Zeichen in ihren Makronamen verwendet, muss die Aktivierung erfolgen, um Änderungen an diesen Routinen zu ermöglichen.

\expandafter\def\csname mysym1\endcsname- Zahlen sind in Makronamen bei der Verwendung nicht zulässig und funktionieren \defdaher nicht, aber das ist es, was ich erreichen möchte. Der Name entspricht effektiv einer Syntax. Allerdings würde die Aussage neu definiert , was ich nicht tun möchte, und bedeutet daher „überspringen Sie das nächste (in diesem Fall ) und erweitern Sie das Folgende, nämlich . Dies entspricht effektiv dem nicht zulässigen , befolgt aber die Regeln.\def\mysym1{\dag}\csname mysym1\endcsname\mysym1\def\csname...\csname\expandafter\def\csname\def\mysym1{}

\newcounter{itnum}und \stepcounter{itnum}- erstellt (setzt auf Null) und erhöht eine LaTeX-Struktur namens „Zähler“, die einfach ein ganzzahliger Index ist. Der aktuelle Wert kann (als Textzeichenfolge) abgerufen werden, indem \thevor den Zählernamen gesetzt wird, in diesem Fall \theitnum.

\par- einen neuen Absatz beginnen

\relax- tut nichts, wird aber nicht „erweitert“, und daher wird etwas, das versucht, den Code davor zu erweitern, die Erweiterung beenden, wenn es bei ankommt \relax. Ich habe es hier eingefügt, damit nichts, was folgt, versehentlich als Teil des optionalen Arguments genommen werden kann.

\hfilist dehnbarer Kleber ( \hfillist eine dehnbarere Version von \hfil). Er kann seine horizontale Länge zwischen den Gegenständen links und rechts von ihm ausdehnen. Stellen Sie es sich wie ein Gummiband vor.

\@currentlabelund \i@labelsind die Art und Weise, wie LaTeX intern auf ein Label verweist und wie es ein neues erstellt. Damit diese Methode funktioniert, muss ich den ersten dieser Befehle ändern. Dann muss ich den zweiten davon aufrufen und ihm die „neue“ Labeldefinition übergeben.

\AtBeginDocument{}- Sagt „Tun Sie dies nicht, bis \begin{document}. Der Grund dafür ist, dass hyperrefüberall damit beschäftigt ist, Dinge neu zu definieren, und deshalb möchte ich dies nicht tun, bis hyperrefdie gewünschten Initialisierungen vollständig abgeschlossen sind.

\ilabel– Da ein Benutzer in seinem Code normalerweise keine Zeichen verwenden kann @, erstelle ich dieses Makro, um es effektiv \i@labelmit der richtig neu definierten Bezeichnung aufzurufen.

verwandte Informationen