Werteübergabe von Zählervariablen in labels

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Werteübergabe von Zählervariablen in labels

von ascore5000 » Sa 10. Mär 2018, 17:41

super sache - das zeigt genau das Verhalten, welches ich brauche!
Vielen Dank!

Den Begriff expandieren kannte ich noch nicht.

Wenn ich das richtig verstehe, wurde hier ein TeX-Makro mit dem Namen \next definiert, dass sofort expandiert.

Expandieren meint dann, nicht den Befehl selbst, sondern die Auswirkungen der Befehle für die Definition des Makros zu nutzen. So wie eine Referenzierung bzw. eine Wertübergabe von Variablen in anderen Programmiersprachen.

Das \noexpand dient dann dazu, den nächsten Befehl \paragraph vor dem direkten expandieren zu schüzten.

Ist das korrekt so?

von u_fischer » Sa 10. Mär 2018, 15:01

nameref gibt sich große Mühe sein Argument nicht zu expandieren, sondern unverändert abzuspeichern. Du musst also vorher expandieren -- und ggfs. darauf achten, die Dinge zu schützen, nicht nicht expandiert werden dürfen:
\documentclass[
   a4paper,
]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{nameref}

\newcounter{Testcounter}
\newenvironment{Testueberschrift}[1]{%
   \refstepcounter{Testcounter}%
   \edef\next{%
   \noexpand\paragraph{Ueberschrift-Nr.  \arabic{Testcounter}}}%
   \next
   \label{#1}%
}{}


\begin{document}

Testtext, an dem die Referenz hängt: \nameref{y}

\begin{Testueberschrift}{x}
Text unter einer Überschrift.
\end{Testueberschrift}

\begin{Testueberschrift}{y}
Text unter einer anderen Überschrift.
\end{Testueberschrift}

\end{document} 

von ascore5000 » Sa 10. Mär 2018, 11:54

Hallo Johannes,

das Gezeigte ist nur ein Minimalbeispiel und wird in der eigentlichen Umsetzung deutlich komplexer.
Konkret: Ich habe mehrere Objekte die ich zweistufig durchnummerieren muss: 1-1, 1-2, 1-3, ... 2-1, 2-2, 2-2...
Auf diese möchte ich später Referenzieren können, und zwar so, dass im Haupttext dann ein eigener Text dargestellt wird, den ich in currentlabel setze.

Ich muss das auch nicht unbedingt in dem paragraph drin machen. Ich habe schon verschiedene Dinge mit \@currentlabel getestet, das wäre mir auch sehr recht, dort tritt aber das gleiche Verhalten auf:
\documentclass[
	a4paper,
]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{nameref}


\makeatletter
\newcommand{\myLabel}[1]{
  \def\@currentlabelname{#1}
}
\makeatother

\newcounter{Testcounter}
\newenvironment{TestObjekt}[1]{
	\refstepcounter{Testcounter}
	Ein Objekt Nr. \arabic{Testcounter} \\
	\myLabel{Zu Objekt Nr.-\arabic{Testcounter}}
	\label{#1}
}{}

\begin{document}

Testtext, an dem die Referenz hängt: \nameref{y}
\\

\begin{TestObjekt}{x}
Ein Objekt.
\end{TestObjekt}

\begin{TestObjekt}{y}
Ein anderes Objekt.
\end{TestObjekt}

\end{document}
Der Output sieht so aus:
Testtext, an dem die Referenz hängt: Zu Objekt Nr.-0
Ein Objekt Nr. 1
Ein Objekt.
Ein Objekt Nr. 2
Ein anderes Objekt.
Dort, wo die 0 steht, sollte eigentlich die 2 hin.

Ich hoffe, mein Anliegen ist verständlicher geworden.

Vielen Dank
ascore5000

von Johannes_B » Sa 10. Mär 2018, 08:49

Für mich nicht verständlich. LaTeX bietet dir doch bereits funktionierende automatisch nummerierte und referenzierbare überschriften an. Warum versuchst du das Rad neu zu erfinden?

Werteübergabe von Zählervariablen in labels

von ascore5000 » Sa 10. Mär 2018, 01:08

Hallo Liebes Forum,

ich habe folgendes Problem:
Wie man im nachfolgenden Minimalbeispiel sieht, versuche ich die Texte, die beim Referenzieren von Labels ausgegeben werden anzupassen. Dabei soll der gewünschte Text aus der Überschrift (muss nicht unbedingt die Überschrift sein, kann auch anders funktionieren) genommen werden.
Problem: Habe ich hier eine Zählervariable drin, wird diese in der .aux-Datei nicht als Wert sondern als Befehl eingefügt:
\newlabel{x}{{1}{1}{Ueberschrift-Nr. \arabic {Testcounter}}{}{}}
Dementsprechend wird bei der Referenz der aktuelle Wert der Variable an der aktuellen Stelle im Dokument ausgegeben.

Hier das Minimalbeispiel:
\documentclass[
	a4paper,
]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{nameref}

\newcounter{Testcounter}
\newenvironment{Testueberschrift}[1]{
	\refstepcounter{Testcounter}
	\paragraph{Ueberschrift-Nr. \arabic{Testcounter}}
	\label{#1}
}{}

\begin{document}

Testtext, an dem die Referenz hängt: \nameref{y}

\begin{Testueberschrift}{x}
Text unter einer Überschrift.
\end{Testueberschrift}

\begin{Testueberschrift}{y}
Text unter einer anderen Überschrift.
\end{Testueberschrift}

\end{document}
Ich hoffe mein Problem ist verständlich.

Vielen Dank vorab für eure Hilfe!
ascore5000

Nach oben