QR-Code Erstellung (pst-barcode) - Kompiler Error

Tabellen und Grafiken erstellen und anordnen


utgmk
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 9. Feb 2022, 14:39

QR-Code Erstellung (pst-barcode) - Kompiler Error

Beitrag von utgmk »

Hallo

ich habe ein kleines Problem beim Erstellen einer QR Codes mittels pst-barcode.

Wenn ich den Code unten ausführe erscheint eine Fehlermeldung sobald ich QR Nr. 3+4 einkommentiere. Ich würde gerne QR Code Variante 4 verwenden und TestID, Testdatum und Testuhrzeit als Parameter dem QR Code Generator übergeben.

TestID=Zufällswert (rand) Package lcg
Testdatum=Heute
Testuhrzeit=Heute

Ich weiß leider nicht, warum es nicht funktioniert.

Fehlermeldung:
! TeX capacity exceeded, sorry [input stack size=5000].
\rand ->\r@nd
\@tempcnta \@tempcntb \@tempcnta = \f@rst \@tempcntb = \l@st \...
l.52 ...ode{\weburl}{width=1.0 height=1.0}{qrcode}

Es wäre super, wenn mir jemand einen Tipp geben könnte. Ich bin für jeden Tipp dankbar.

Viele Grüße
UTGMK

\documentclass[11pt, xcolor=dvipsnames]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{pst-barcode}
\usepackage[first=10000000, last=90000000, counter=id]{lcg}
\usepackage[ngerman]{babel}
\usepackage{ucs}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb,amstext}
\usepackage[]{sidecap}
\usepackage{graphicx}
\usepackage[ddmmyyyy]{datetime}
\usepackage{scrtime}
\usepackage{scrdate} 
\usepackage[a4paper, left=2cm, right=2cm, top=2cm, bottom=1cm]{geometry}
\setlength{\headsep}{0.3cm}
\setlength{\parindent}{0em}



\newcommand{\testid}{\rand\arabic{id}}
\newcommand{\Testdatum}{\the\day.\the\month.\the\year}
\newcommand{\Testuhrzeit}{\thistime}
\newcommand{\weburl}{https://blub.de/meine\_dateien/urltest.html?var1=\testid\&var2=\Testdatum\&var3=\Testuhrzeit}


\begin{document}

ID \testid \\
\Testdatum \ - \Testuhrzeit \\ \\

    
QR Code Nr. 1 --> geht\\
\begin{pspicture}(25mm,25mm)
    \psbarcode{234234}{width=1.0 height=1.0}{qrcode}
\end{pspicture}
\\

QR Code Nr. 2 --> geht\\
\begin{pspicture}(25mm,25mm)
    \psbarcode{https://blub.de/meine_dateien/urltest.html?var1=123&var2=02.12.2021&var3=15:33}{width=1.0 height=1.0}{qrcode}
\end{pspicture}
\\

QR Code Nr. 3 --> geht nicht\\
\begin{pspicture}(25mm,25mm)
    %\psbarcode{https://blub.de/meine\_dateien/urltest.html?var1=\testid\&var2=\Testdatum\&var3=\Testuhrzeit}{width=1.0 height=1.0}{qrcode}
\end{pspicture}
\\

QR Code Nr. 4 --> geht nicht\\
\begin{pspicture}(25mm,25mm)
    %\psbarcode{\weburl}{width=1.0 height=1.0}{qrcode}
\end{pspicture}

\end{document}

gast.

Re: QR-Code Erstellung (pst-barcode) - Kompiler Error

Beitrag von gast. »

Da sind diverse Fehler im Code:
  • \thistime ist ein Befehl, von dem es auch eine Sternvariante gibt. Solche Befehle sind in der Regel nicht voll expandierbar. Das text or filename-Argument von \pst-barcode muss aber voll expandierbar sein. \thistime kann also nicht innerhalb dieses Arguments von \pst-barcode verwendet werden. Dasselbe gilt für selbst definierte Befehle, die \thistime enthalten, weil diese dann natürlich auch nicht voll expandierbar sind.
  • \rand ist ebenfalls nicht voll expandierbar. Konsequenz siehe oben. Du musst hier also den Aufruf von \rand vor \pst-barcode verschieben und kannst dann einfach \theid innerhalb des Arguments von \pst-barcode verwenden.
Daneben ist zu bemerken:
  • Das Paket ucs macht Ärger und wird eigentlich auch nicht gebraucht, also sollte man es generell weglassen.
  • 11pt ist die Voreinstellung bei scrartcl, also überflüssig.
  • \usepackage[utf8]{inputenc} ist seit LaTeX 2018/04/01 überflüssig.
  • datetime ist veraltet. Man beachte die Angaben unter dem Link.
  • Option ngerman setzt man besser bei \documentclass, damit auch andere Pakete als babel ggf. etwas davon mitbekommen.
  • \setlength{parindent}{0pt} ist eine blöde Idee. Man beachte den Link.
  • Erst Einstellungen mit geometry vorzunehmen und dann nachträglich an diesen herumzupfuschen ist eine blöde Idee. Besser alle Einstellungen mit geometry vornehmen. Man beachte den Link.

utgmk
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 9. Feb 2022, 14:39

Re: QR-Code Erstellung (pst-barcode) - Kompiler Error

Beitrag von utgmk »

gast. hat geschrieben:
Do 10. Feb 2022, 15:24
Da sind diverse Fehler im Code:
  • \thistime ist ein Befehl, von dem es auch eine Sternvariante gibt. Solche Befehle sind in der Regel nicht voll expandierbar. Das text or filename-Argument von \pst-barcode muss aber voll expandierbar sein. \thistime kann also nicht innerhalb dieses Arguments von \pst-barcode verwendet werden. Dasselbe gilt für selbst definierte Befehle, die \thistime enthalten, weil diese dann natürlich auch nicht voll expandierbar sind.
  • \rand ist ebenfalls nicht voll expandierbar. Konsequenz siehe oben. Du musst hier also den Aufruf von \rand vor \pst-barcode verschieben und kannst dann einfach \theid innerhalb des Arguments von \pst-barcode verwenden.
Daneben ist zu bemerken:
  • Das Paket ucs macht Ärger und wird eigentlich auch nicht gebraucht, also sollte man es generell weglassen.
  • 11pt ist die Voreinstellung bei scrartcl, also überflüssig.
  • \usepackage[utf8]{inputenc} ist seit LaTeX 2018/04/01 überflüssig.
  • datetime ist veraltet. Man beachte die Angaben unter dem Link.
  • Option ngerman setzt man besser bei \documentclass, damit auch andere Pakete als babel ggf. etwas davon mitbekommen.
  • \setlength{parindent}{0pt} ist eine blöde Idee. Man beachte den Link.
  • Erst Einstellungen mit geometry vorzunehmen und dann nachträglich an diesen herumzupfuschen ist eine blöde Idee. Besser alle Einstellungen mit geometry vornehmen. Man beachte den Link.
Vielen Dank schonmal für die Antworten.

Zu den Nebenbemerkungen:
  • ucs Paket habe ich entfernt
  • 11pt habe ich entfernt
  • \usepackage[utf8]{inputenc} entfernt
  • datetime entfernt
  • ngerman in die Klasse hochgezogen
  • \setlength{parindent}{0pt} --> parskip
  • geometry --> \usepackage[a4paper, left=2cm, right=2cm, top=2cm, bottom=1cm, headsep=0.3cm]{geometry} headsep in die geometrie gezogen
Nun zu den zwei eigentlichen Hauptfehlern:
  • wie bekomme ich eine expandierbare aktuelle Uhrzeit? gibt es nicht eine .toString() Funktion wie in C#?
  • wie bekomme ich eine expandierbare Zufallszahl, die ich nutzen kann? Ich rufe doch \rand vor dem \pst-barcode Befehl auf (vor begin{document} bzw. Ich zeige die Daten zu Beginn des Dokumentes an)
  • lautet der Befehl: \thetestid oder \the\testid?
\documentclass[ngerman, parskip]{scrartcl}
\usepackage{pst-barcode}
\usepackage[first=10000000, last=90000000, counter=id]{lcg}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb,amstext}
\usepackage[]{sidecap}
\usepackage{graphicx}
\usepackage{scrtime}
\usepackage{scrdate} 
\usepackage[a4paper, left=2cm, right=2cm, top=2cm, bottom=1cm, headsep=0.3cm]{geometry}


\newcommand{\testid}{\rand\arabic{id}}
\newcommand{\Testdatum}{\the\day.\the\month.\the\year}
\newcommand{\Testuhrzeit}{\thistime}
\newcommand{\weburl}{https://blub.de/meine\_dateien/urltest.html?var1=\testid\&var2=\Testdatum\&var3=\Testuhrzeit}


\begin{document}

ID \testid \\
\Testdatum \ - \Testuhrzeit \\ \\

    
QR Code Nr. 1 --> geht\\
\begin{pspicture}(25mm,25mm)
    \psbarcode{234234}{width=1.0 height=1.0}{qrcode}
\end{pspicture}
\\

QR Code Nr. 2 --> geht\\
\begin{pspicture}(25mm,25mm)
    \psbarcode{https://blub.de/meine_dateien/urltest.html?var1=123&var2=02.12.2021&var3=15:33}{width=1.0 height=1.0}{qrcode}
\end{pspicture}
\\

QR Code Nr. 3 --> geht nicht\\
\begin{pspicture}(25mm,25mm)
    %\psbarcode{https://blub.de/meine\_dateien/urltest.html?var1=\testid\&var2=\Testdatum\&var3=\Testuhrzeit}{width=1.0 height=1.0}{qrcode}
\end{pspicture}
\\

QR Code Nr. 4 --> geht nicht\\
\begin{pspicture}(25mm,25mm)
    %\psbarcode{\weburl}{width=1.0 height=1.0}{qrcode}
\end{pspicture}

\end{document}


utgmk
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 9. Feb 2022, 14:39

Re: QR-Code Erstellung (pst-barcode) - Kompiler Error

Beitrag von utgmk »

Ich habe eben noch

\usepackage{uhrzeit}
\dtc

ausprobiert. Geht aber leider auch nicht :(

utgmk
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 9. Feb 2022, 14:39

Re: QR-Code Erstellung (pst-barcode) - Kompiler Error

Beitrag von utgmk »

Was auch noch erschwerend ist.

ich möchte die Zufallszahl an mehreren Stellen im Dok und im QR Code verwenden. Ich habe eben gerade festgestellt, dass der Kompiler immer neu würfelt mit jeden Aufruf von \testid

:?

gast.

Re: QR-Code Erstellung (pst-barcode) - Kompiler Error

Beitrag von gast. »

utgmk hat geschrieben:
Do 10. Feb 2022, 16:38
wie bekomme ich eine expandierbare aktuelle Uhrzeit?
Ich habe oben bereits via datetime-Link u. a. auf datetime2 hingewiesen. Schade, dass du das ignoriert hast, obwohl ich extra darauf hingewiesen hatte, dass der Link zu beachten ist.
utgmk hat geschrieben:
Do 10. Feb 2022, 16:38
wie bekomme ich eine expandierbare Zufallszahl, die ich nutzen kann? Ich rufe doch \rand vor dem \pst-barcode Befehl auf (vor begin{document} bzw.
Das ist ein Irrtum. TeX ist eine Makrosprache keine prozedurale Sprache. Dein \testid expandiert deshalb immer zu \rand\arabic{id}. Und das \rand ist dann leider nur noch teilweise expandierbar, wie bereits erklärt. Du musst das also schon so machen, wie oben erklärt, also erst \rand wirklich verwenden (nicht nur ein neues Makro definieren, das \rand enthält). Wie die Anleitung erklärt, wird dabei eine Zufallszahl im definierten Zähler, bei dir id, abgelegt. Denn kannst du dann im Aufruf von \pst_barcode per \theid ausgeben. Die Voreinstellung von \the<Zählername> ist expandierbar.
utgmk hat geschrieben:
Do 10. Feb 2022, 16:38
lautet der Befehl: \thetestid oder \the\testid?
Die Frage verstehe ich nicht. Es ist ein \thetestid ist nicht definiert und \the\testid ist die Definition von \testid, also \rand\arabic{id}. Die Ausgabe des Zählers id lautet schlicht \theid, genau wie oben erwähnt.

gast.

Re: QR-Code Erstellung (pst-barcode) - Kompiler Error

Beitrag von gast. »

utgmk hat geschrieben:
Do 10. Feb 2022, 17:12
Ich habe eben gerade festgestellt, dass der Kompiler immer neu würfelt mit jeden Aufruf von \testid
Logisch. Da \testid zu \rand\arabic{id} expandiert, wird ja auch jedes Mal, beim Aufruf von \testid \rand ausgeführt. Wenn du nur einmal eine Zufallszahl haben willst, dann darfst du auch nur einmal \rand aufrufen und kannst anschließend immer den direkt den Zähler id verwenden, also entweder \value{id}, wenn dessen Wert benötigt wird, \theid, wenn dessen Standardausgabe benötigt wird, \roman{id}, wenn eine Ausgabe als kleine römische Zahl benötigt wird, etc.

utgmk
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 9. Feb 2022, 14:39

Re: QR-Code Erstellung (pst-barcode) - Kompiler Error

Beitrag von utgmk »

Also ich muss mich auf jeden fall schon einmal bedanken. Ich bin etwas weiter gekommen.
Die Erstellung der ID funktioniert jetzt.

Das mit aktueller Uhrzeit und Datum speichern bekomme ich noch nicht hin.
Zum Format dd.mm.yyyy bzw. hh:mm bin ich noch gar nicht gekommen :( .
\documentclass{article}
\usepackage[]{datetime2}

\begin{document}

Datum anzeigen: \DTMdisplaydate{1985}{03}{19}{-1}

\section*{Beliebiges Datum speichern geht -- ich brauche allerdings das aktuelle Datum und Uhrzeit}
\DTMsavedate{mydate}{2016-02-10}
Gespeichertes Datum: \DTMusedate{mydate}

\section*{Aktuelles Datum speichern, geht nicht}
\DTMsavedate{mydate}{\DTMnow}
\DTMusedate{mydate}

\section*{Aktuelle Uhrzeit}
\DTMcurrenttime

\section*{Aktuelle Uhrzeit speichern, geht nicht}
\DTMsavetime{uhrzeit}{\DTMcurrenttime}
\DTMusetime{uhrzeit}

\end{document}
Wenn ich alles gelöst habe poste ich hier noch den Gesamtcode.

utgmk
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Mi 9. Feb 2022, 14:39

Re: QR-Code Erstellung (pst-barcode) - Kompiler Error

Beitrag von utgmk »

Uhrzeit speichern geht jetzt auch! Fehlt noch das Datum im Format dd.mm.yyyy
\documentclass{article}
\usepackage[]{datetime2}

\begin{document}
\section*{Aktuelle Uhrzeit speichern, geht jetzt!!!}
\DTMsavenow{Testuhrzeit}
\DTMusetime{Testuhrzeit}

\end{document}

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Re: QR-Code Erstellung (pst-barcode) - Kompiler Error

Beitrag von Bartman »

Du dürftest im zweiten Abschnitt "Example Usage" der Dokumentation fündig werden. Im dortigen Beispiel wäre nur noch die Sprachoption anzupassen.

Antworten