Ich will einen Befehl
Aber das Anwenden von pgfkeys in dem Befehl von @egreg (hier label-Angabe Pflichtargument!) Öffne in Overleaf
\usepackage{xparse} % \tagx[shown text, optional]{label-name} \makeatletter \NewDocumentCommand{\tagx}{om}{% \IfNoValueTF{#1} {% normal equation number \refstepcounter{equation}(\theequation)\label{#2}% } {% personal tag (#1)\def\@currentlabel{#1}\label{#2}% }% } \makeatother doch schwieriger als ich dachte. Was muss ich tun? Unvollständiges MWE: Öffne in Overleaf
\documentclass[12pt]{scrreprt} \usepackage{amsmath, amsfonts, amssymb} % Ein pgfkey \pgfkeys{/tagx/.cd, label/.initial={\def\@currentlabel{#1}\label{#2}}, name/.initial={} } \usepackage{xparse} % \tagx[shown text, optional]{label-name} \makeatletter \NewDocumentCommand{\tagx}{om}{% \IfNoValueTF{#1} {% normal equation number \refstepcounter{equation}(\theequation)\label{#2}% } {% personal tag (#1)\def\@currentlabel{#1}\label{#2}% }% } \makeatother \usepackage[colorlinks=true]{hyperref} % for highlighting \begin{document} \chapter{First Chapter} An equation for counting: \begin{equation} a+b=c\label{eq:bar1} \end{equation} \bigskip This is an inline-tag \tagx{foo1}, it is also labeled \eqref{foo1}. This is a personalized inline-tag \tagx[***]{foo2}, it is also labeled \eqref{foo2}. \bigskip This is an inline-tag \tagx{}, it is \emph{not} labeled. This is a personalized inline-tag \tagx[***]{}, it is \emph{not} labeled. \bigskip An another equation: \begin{equation} 1+1=2\label{eq:bar2} \end{equation} \end{document} gefragt 20 Mai '19, 17:33 cis
Ergebnis 5 von 8
show 3 more comments
|
Das Folgende ist eine reine LaTeX3 Implementierung, die das Öffne in Overleaf
\documentclass[12pt]{scrreprt} \usepackage[]{amsmath} \usepackage{xparse} % lädt auch `expl3` \makeatletter \ExplSyntaxOn \keys_define:nn { cis / tagx } { ,label .tl_set:N = \l__cis_tagx_label_tl ,name .tl_set:N = \l__cis_tagx_name_tl } \NewDocumentCommand \tagx { O{} } { \group_begin: \keys_set:nn { cis / tagx } { #1 } \tl_if_empty:NTF \l__cis_tagx_name_tl { \refstepcounter{equation} ( \theequation ) \tl_if_empty:NF \l__cis_tagx_label_tl { \exp_args:NV \label \l__cis_tagx_label_tl } } { ( \l__cis_tagx_name_tl ) \tl_if_empty:NF \l__cis_tagx_label_tl { \tl_set_eq:NN \@currentlabel \l__cis_tagx_name_tl \exp_args:NV \label \l__cis_tagx_label_tl } } \group_end: } \ExplSyntaxOff \makeatother \begin{document} \chapter{First Chapter} An equation for counting: \begin{equation} a+b=c\label{eq:bar1} \end{equation} \bigskip This is an inline-tag \tagx[label=foo1], it is also labeled \eqref{foo1}. This is a personalized inline-tag \tagx[name=***,label=foo2], it is also labeled \eqref{foo2}. \bigskip This is an inline-tag \tagx, it is \emph{not} labeled. This is a personalized inline-tag \tagx[name=***], it is \emph{not} labeled. \bigskip An another equation: \begin{equation} 1+1=2\label{eq:bar2} \end{equation} \end{document} Ergänzung: eine bis auf Öffne in Overleaf
\documentclass[12pt]{scrreprt} \usepackage[]{amsmath} \usepackage{xparse} \usepackage{pgfkeys} \makeatletter \newcommand*\cistagx@label{} \newcommand*\cistagx@name{} \pgfkeys {% /cis/tagx/.cd ,label/.store in=\cistagx@label ,name/.store in=\cistagx@name } \NewDocumentCommand \tagx { O{} } {% \begingroup \pgfkeys{/cis/tagx/.cd,#1} \ifx\cistagx@name\@empty \refstepcounter{equation}% (\theequation)% \ifx\cistagx@label\@empty \else \expandafter\label\expandafter{\cistagx@label}% \fi \else (\cistagx@name)% \ifx\cistagx@label\@empty \else \let\@currentlabel\cistagx@name \expandafter\label\expandafter{\cistagx@label}% \fi \fi \endgroup } \makeatother \begin{document} \chapter{First Chapter} An equation for counting: \begin{equation} a+b=c\label{eq:bar1} \end{equation} \bigskip This is an inline-tag \tagx[label=foo1], it is also labeled \eqref{foo1}. This is a personalized inline-tag \tagx[name=***,label=foo2], it is also labeled \eqref{foo2}. \bigskip This is an inline-tag \tagx, it is \emph{not} labeled. This is a personalized inline-tag \tagx[name=***], it is \emph{not} labeled. \bigskip An another equation: \begin{equation} 1+1=2\label{eq:bar2} \end{equation} \end{document} Ergänzung 2: Eine Version, die zwar LaTeX3 verwendet, nicht aber Öffne in Overleaf
\documentclass[12pt]{scrreprt} \usepackage[]{amsmath} \usepackage{xparse} % lädt auch `expl3` \usepackage{pgfkeys} \makeatletter \ExplSyntaxOn \tl_new:N \l__cis_tagx_label_tl \tl_new:N \l__cis_tagx_name_tl \pgfkeys {% /cis/tagx/.cd % we have to use `.store~in` instead of `.store in` as the spaces are % ignored in expl3 and `~` is a space here. ,label/.store~in=\l__cis_tagx_label_tl ,name/.store~in=\l__cis_tagx_name_tl } \NewDocumentCommand \tagx { O{} } {% \group_begin: \pgfkeys{/cis/tagx/.cd,#1} \tl_if_empty:NTF \l__cis_tagx_name_tl { \refstepcounter{equation} ( \theequation ) \tl_if_empty:NF \l__cis_tagx_label_tl { \exp_args:NV \label \l__cis_tagx_label_tl } } { ( \l__cis_tagx_name_tl ) \tl_if_empty:NF \l__cis_tagx_label_tl { \tl_set:Nx \@currentlabel { \l__cis_tagx_name_tl } \exp_args:NV \label \l__cis_tagx_label_tl } } \group_end: } \ExplSyntaxOff \makeatother \begin{document} \chapter{First Chapter} An equation for counting: \begin{equation} a+b=c\label{eq:bar1} \end{equation} \bigskip This is an inline-tag \tagx[label=foo1], it is also labeled \eqref{foo1}. This is a personalized inline-tag \tagx[name=***,label=foo2], it is also labeled \eqref{foo2}. \bigskip This is an inline-tag \tagx, it is \emph{not} labeled. This is a personalized inline-tag \tagx[name=***], it is \emph{not} labeled. \bigskip An another equation: \begin{equation} 1+1=2\label{eq:bar2} \end{equation} \end{document} beantwortet 20 Mai '19, 20:57 Skillmon @Skillmon Erläuterungen... mmmhh... aktuell noch nicht. Also ich fände es gut, wenn Du eine pgfkeys-Lösung ergänzen könntest. Vll. aufbauend auf dem xparse-Code (den ich verstehe), vll. auch nicht. Weil das kann ich dann auch gut für Weiteres und Ähnliches verwenden kann. Bei expl3 stehe ich jedesmal vor einem neuen Problem.
(20 Mai '19, 21:34)
cis
@cis ich kann verstehen, wenn man anfangs mit expl3 seine Probleme hat, ging mir ähnlich. Aber wenn man ein wenig
(20 Mai '19, 22:13)
Skillmon
@Skillmon Ui... ja ok. Also ich hatte mir das in Gedanken einfacher vorgestellt. Ich dachte, man nimmt den fertigen xparse-Befehl und ergänzt da zwei pgfkeys; bloß einen gescheiten default habe ich nicht hinbekommen.
(20 Mai '19, 22:19)
cis
@cis man hätte es auch einfacher umstellen können, aber ich habe mir gedacht, wenn schon ohne
(20 Mai '19, 22:34)
Skillmon
Wie dem auch sei: die pgfkeys-Lösung entspricht sehr genau dem, was ich suchte; habe ich hier direkt eingepflegt. Ich hatte irgendwie gehofft, man kann einen fertiges (xparse-)Kommando um pgfkeys ergänzen. Aber die Lösung mit mit ifx-Unterscheidungen ist zwar schwierig, aber nachvollziehbar.
(21 Mai '19, 23:17)
cis
Ergebnis 5 von 6
show 1 more comments
|
Wenn Argument #2 leer ist, darfst du daraus keinen label machen.
\tl_if_empty:nF{#2}{\label{#2}}
.@Ulrike Fischer Ähh, ist das jetzt schon die Lösung?
Wieso
pgfkeys
und nichtl3keys
wenn du bereits L3 verwendest?@Skillmon Äh, weiß ich nicht. Da pgfkey zumindest halbwegs anschaulich und nachvollziehbar ist. Du Syntax
\tagx[name=..., label=...]
ist auch gut.@Skillmon, da das Beispiel weder das eine noch das andere verwendet, ist es wohl ziemlich egal ;-).
@Ulrike Fischer: Deinen Typ-Befehl finde ich nicht in der xparse-Anleitung. Ich kann darauf nicht aufbauen, tut mir leid.
@Skillmon: Ich bekomme fehlerhaft etwas
\tagx[name][label-name]
hin; aber das ist nicht schön (auch wenn es mal funktioniert); weil man dann auch sowas wie\tagx[][nur label-name]
braucht.Die pgfkeys-Syntax ist da schon besser:
\tagx[name=<Anzeige>, label=<label-Name>]
\tagx[name=<Anzeige>, label=<label-Name>]
kann man auch mit l3keys (oder keyval, oder xkeyval oder weiteren keyval-Paketen) programmieren. Aber wenn du schon xparse (das zu expl3 gehört) verwendest, ist l3keys eigentlich die logischere Wahl.\tl_if_empty:nT
wird in der expl3-Dokumentation interface3.pdf beschrieben.@Ulrike Fischer: Nein, egal ist das nicht. Eine schöne Lösung, die man sogar versteht und auf der man für spätere Probleme aufbauen kann ist nicht so verkehrt. Daher interessiert mich das insb. mit pgfkeys.