PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pst-barcode mit luacode function



leo22
17-03-2017, 14:34
Hallo,

ich möchte einen Data-Matrix-Code für einen Kalendereintrag erstellen (siehe auch http://de.wikipedia.org/wiki/ICalendar). Dabei soll jedoch der Termineintrag mit einer Lua-Funktion berechnet werden (im Beispiel der Einfachheit halber bei DTEND das aktuelle Datum und die aktuelle Uhrzeit mit der Lua-Funktion Termin()).

In der jetzigen Form funktioniert das nicht. Im QR-Code steht nicht DTEND:20170317T120000 sondern DTEND:{Termin()}. Feststellen lässt sich das z. B. mit dem Barcodescanner eines Smartphones.

Wie kann das Problem gelöst werden?


\RequirePackage{luatex85}
\RequirePackage{ifluatex}

\documentclass[12pt]{article}
\ifluatex\usepackage{fontspec}\fi

\usepackage{shellesc, auto-pst-pdf}
\usepackage{pst-barcode}
\usepackage{luacode}

\begin{document}

\begin{luacode}
function Termin()
return(os.date("\%Y\%m\%dT\%H\%M\%S"))
end
\end{luacode}

Dieser Termin soll als DTEND eingetragen werden:
\directlua{tex.print{Termin()}}\\

Data-Matrix-Code für den Kalendereintrag:\\

\begin{pspicture}%
\psbarcode{%
BEGIN:VCALENDAR^^J%
VERSION:2.0^^J%
BEGIN:VEVENT^^J%
SUMMARY:Name^^J%
DESCRIPTION:Beschreibung^^J%
DTSTART:20170317T120000^^J%
DTEND:\directlua{Termin()}^^J%
LOCATION:Ort^^J%
END:VEVENT^^J%
END:VCALENDAR%
}{height=1 width=1}{qrcode}%
\end{pspicture}

\end{document}

u_fischer
17-03-2017, 15:51
Das kann nicht funktionieren. Das Bild wird doch mit latex+dvips gemacht, und da sind die lua-Befehle nicht definiert.

Lass das lieber mit auto-pst-pdf und benutze das qrcode-Paket.

leo22
17-03-2017, 22:26
Du hast recht, das kann nicht funktionieren, da kein luatex ausgeführt wird. Da muss erst jemand unbeteiligtes kommen. Vielen Dank.

Ich mache es also mit dem qrcode-Paket. Und es geht wunderbar ;-)


\documentclass{article}

\usepackage{fontspec}
\usepackage{qrcode}
\usepackage{luacode}

\begin{document}

\begin{luacode}
function Termin()
return tex.print{os.date("\%Y\%m\%dT\%H\%M\%S")}
end
\end{luacode}

Dieser Termin soll als DTEND eingetragen werden:
\directlua{Termin()}\\

Data-Matrix-Code für den Kalendereintrag:\\

\qrcode[height=1in]{
BEGIN:VCALENDAR
BEGIN:VEVENT
VERSION:2.0
SUMMARY:Name
DESCRIPTION:Beschreibung
DTSTART:20170317T120000
DTEND:\directlua{Termin()}
LOCATION:Ort
END:VEVENT
END:VCALENDAR
}

\end{document}