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

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: QR-Code Erstellung (pst-barcode) - Kompiler Error

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

von u_fischer » Fr 11. Feb 2022, 11:55

wie bekomme ich eine expandierbare Zufallszahl, die ich nutzen kann?
In einem aktuellen LaTeX kannst du \fpeval verwenden (in älteren musst du dafür xfp laden):
\documentclass{article}
\usepackage{hyperref}

\newcommand{\testid}{}
\edef\testid{\fpeval{randint(500)}}

\begin{document}
\href{https://www.blub.de?var=\testid}{aaaa}

\href{https://www.blub.de?var=\testid}{aaaa}
\end{document}
Doku zu randint ist in interface3.pdf

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

von utgmk » Do 10. Feb 2022, 21:19

Ich habe es, mit eurer Hilfe, gelöst.

Ist aber in meinen Augen eine sehr unglückliche Lösung (Quick&Dirty Lösung). Wahrscheinlich geht es viel einfacher.

Vielen Dank nochmal für eure Hilfe!

Ich muss sagen, dass ich aus der C/C# Welt komme und die Bearbeitung in Latex nicht so wirklich intuitiv finde. Es war aber auch mein erstes Projekt. Vielleicht wird es ja noch besser.

In Summe bin ich an meinem kompletten Dokument (Einseiter) locker 15 Stunden gesessen :(
\documentclass[ngerman]{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{datetime2}
\usepackage[a4paper, left=2cm, right=2cm, top=2cm, bottom=1cm, headsep=0.3cm]{geometry}


\newcommand{\leadingzero}[1]{\ifnum #1<10 0\the#1\else\the#1\fi}

%#################################################
\newcommand{\testid}{\rand\arabic{id}}
\newcommand{\Testdatum}{\leadingzero{\day}.\leadingzero{\month}.\the\year}

\DTMsavenow{jetzt}

\newcommand{\weburl}{https://blub.de/my_files/test.html?var1=\theid\&var2=\DTMfetchday{jetzt}.\DTMfetchmonth{jetzt}.\DTMfetchyear{jetzt}\&var3=\DTMusetime{jetzt}}

\begin{document}

    \\TestID \testid \\
    
    \begin{pspicture}(25mm,25mm)
        \psbarcode{\weburl}{width=1.0 height=1.0}{qrcode}
    \end{pspicture}

    Test durchgeführt: \Testdatum \ - \DTMusetime{jetzt}
\end{document}

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

von Bartman » Do 10. Feb 2022, 21:14

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

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

von utgmk » Do 10. Feb 2022, 20:49

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}

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

von utgmk » Do 10. Feb 2022, 20:40

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.

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

von gast. » Do 10. Feb 2022, 17:19

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.

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

von gast. » Do 10. Feb 2022, 17:14

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.

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

von utgmk » Do 10. Feb 2022, 17:12

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

:?

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

von utgmk » Do 10. Feb 2022, 16:44

Ich habe eben noch

\usepackage{uhrzeit}
\dtc

ausprobiert. Geht aber leider auch nicht :(

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

von utgmk » Do 10. Feb 2022, 16:38

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}


Nach oben