Discussion:
Wie definiere ich einen String mit Zeilenumbruch?
(zu alt für eine Antwort)
Andreas Horn
2024-07-17 20:07:44 UTC
Permalink
Hallo NG,

Ich möchte meinen QR-Code mehrfach im Dokument verwenden und deshalb
einen String für dessen Erstellung definieren.

=== Start Minimalbeispiel ===
% !TeX root = Minimal.tex
% !TeX spellcheck = de_DE
% !TeX encoding = UTF-8
% !TeX TS-program = lualatex
\documentclass{scrartcl}
\usepackage[final]{qrcode}
\newcommand \qrtext {BEGIN:VCARD
VERSION:2.1
N:Name;Vorname2;;;
FN:Vorname2 Name
EMAIL:***@webseite.de
END:VCARD}
\begin{document}
%%%%%%%%
korrekt:

\vspace{3 mm}
\qrcode[
]{BEGIN:VCARD
VERSION:2.1
N:Name;Vorname1;;;
FN:Vorname1 Name
EMAIL:***@webseite.de
END:VCARD}
%%%%%%%%

\vspace{30 mm}
%%%%%%%%
ohne Zeilenumbruch:

\vspace{3 mm}
\qrcode{\qrtext}
%%%%%%%%
\end{document}
=== Stop Minimalbeispiel ===

Fehlerbeschreibung:

Wird \qrcode... direkt in begin{document} eingebettet, sind die
Zeilenumbrüche im QR-Code vorhanden.
Wird \qrcode allerdings vor begin{document} definiert, sind die Zeilen
im QR-Code nicht vorhanden.
- das Anhängen von 2 Backslash erzeugt einen einzelnen Backslash im QR-Code
- \newline erzeugt den Fehler: Missing \endcsname inserted.
\qrcode{\qrtext} und
- \linebreak erzeugt: Illegal parameter number in definition of
\***@texttoencode. \qrcode{\qrtext}

Was mache ich falsch oder was muss ich ändern, damit meine VCARD trotz
mit Zeilenumbruch geht?

Schon mal herzlichen Dank

Andreas
Ulrich D i e z
2024-07-17 21:29:13 UTC
Permalink
Post by Andreas Horn
Hallo NG,
Ich möchte meinen QR-Code mehrfach im Dokument verwenden und deshalb
einen String für dessen Erstellung definieren.
=== Start Minimalbeispiel ===
% !TeX root = Minimal.tex
% !TeX spellcheck = de_DE
% !TeX encoding = UTF-8
% !TeX TS-program = lualatex
\documentclass{scrartcl}
\usepackage[final]{qrcode}
\newcommand \qrtext {BEGIN:VCARD
VERSION:2.1
N:Name;Vorname2;;;
FN:Vorname2 Name
END:VCARD}
\begin{document}
%%%%%%%%
\vspace{3 mm}
\qrcode[
]{BEGIN:VCARD
VERSION:2.1
N:Name;Vorname1;;;
FN:Vorname1 Name
END:VCARD}
%%%%%%%%
\vspace{30 mm}
%%%%%%%%
\vspace{3 mm}
\qrcode{\qrtext}
%%%%%%%%
\end{document}
=== Stop Minimalbeispiel ===
Wird \qrcode... direkt in begin{document} eingebettet, sind die
Zeilenumbrüche im QR-Code vorhanden.
Wird \qrcode allerdings vor begin{document} definiert, sind die Zeilen
im QR-Code nicht vorhanden.
- das Anhängen von 2 Backslash erzeugt einen einzelnen Backslash im QR-Code
- \newline erzeugt den Fehler: Missing \endcsname inserted.
\qrcode{\qrtext} und
- \linebreak erzeugt: Illegal parameter number in definition of
Was mache ich falsch oder was muss ich ändern, damit meine VCARD trotz
mit Zeilenumbruch geht?
In Absatz "2.3 Special characters" von qrcode.pdf, dem Manual zum Paket
qrcode,

http://mirrors.ctan.org/macros/latex/contrib/qrcode/qrcode.pdf#subsection.2.3

, steht, dass das Makro \qrcode auf ein spezielles Catcode-Régime
umschaltet bevor das Argument eingelesen wird.

Dort steht auch, welche Special Character man wie escapen soll wenn man
dieses Umschalten des Catcode-Régime unterläuft.

Unterläuft zB, indem man \qrcode zusammen mit seinem Argument als
Argument eines anderen Makros verwendet, sodass die Sache beim Tokenizen
des Arguments dieses anderen Makros bereits getokenized wird und
folglich das Umschalten auf das andere Catcode-Régime beim Verarbeiten
des Befehls \qrcode keine Wirkung hat.

Oder unterläuft, indem man Komponenten des Arguments von \qrcode in
expandible Makros packt, deren Ersetzungstext beim Definieren
getokenized wird, ohne dass ein Umschalten auf das Catcode-Régime, auf
das der Befehls \qrcode umschaltet, stattfinden würde.

Znd zwar soll man dann unter anderem Zeilenumbrüche als \? und
Leerzeichen als \ (control space) escapen.


\documentclass{scrartcl}
\usepackage[final]{qrcode}

\newcommand \qrtext {BEGIN:VCARD\?
VERSION:2.1\?
N:Name;Vorname1;;;\?
FN:Vorname1\ Name\?
EMAIL:***@webseite.de\?
END:VCARD}


\begin{document}
%%%%%%%%
korrekt:

\vspace{3 mm}
\qrcode[
]{BEGIN:VCARD
VERSION:2.1
N:Name;Vorname1;;;
FN:Vorname1 Name
EMAIL:***@webseite.de
END:VCARD}
%%%%%%%%

\vspace{30 mm}
%%%%%%%%
ohne Zeilenumbruch:

\vspace{3 mm}
\qrcode{\qrtext}
%%%%%%%%
\end{document}



Mit freundlichem Gruß

Ulrich
Andreas Horn
2024-07-17 22:36:09 UTC
Permalink
Hallo Ulrich,

ich muss wieder mal feststellen, dass mein Englisch einfach zu grottig
ist, hatte das halt nicht verstanden.

Und ich stelle außerdem fest, es gibt hier sehr kompetente Leute.

Also vielen lieben Dank
Post by Ulrich D i e z
Post by Andreas Horn
Hallo NG,
Ich möchte meinen QR-Code mehrfach im Dokument verwenden und deshalb
einen String für dessen Erstellung definieren.
=== Start Minimalbeispiel ===
% !TeX root = Minimal.tex
% !TeX spellcheck = de_DE
% !TeX encoding = UTF-8
% !TeX TS-program = lualatex
\documentclass{scrartcl}
\usepackage[final]{qrcode}
\newcommand \qrtext {BEGIN:VCARD
VERSION:2.1
N:Name;Vorname2;;;
FN:Vorname2 Name
END:VCARD}
\begin{document}
%%%%%%%%
\vspace{3 mm}
\qrcode[
]{BEGIN:VCARD
VERSION:2.1
N:Name;Vorname1;;;
FN:Vorname1 Name
END:VCARD}
%%%%%%%%
\vspace{30 mm}
%%%%%%%%
\vspace{3 mm}
\qrcode{\qrtext}
%%%%%%%%
\end{document}
=== Stop Minimalbeispiel ===
Wird \qrcode... direkt in begin{document} eingebettet, sind die
Zeilenumbrüche im QR-Code vorhanden.
Wird \qrcode allerdings vor begin{document} definiert, sind die Zeilen
im QR-Code nicht vorhanden.
- das Anhängen von 2 Backslash erzeugt einen einzelnen Backslash im QR-Code
- \newline erzeugt den Fehler: Missing \endcsname inserted.
\qrcode{\qrtext} und
- \linebreak erzeugt: Illegal parameter number in definition of
Was mache ich falsch oder was muss ich ändern, damit meine VCARD trotz
mit Zeilenumbruch geht?
In Absatz "2.3 Special characters" von qrcode.pdf, dem Manual zum Paket
qrcode,
http://mirrors.ctan.org/macros/latex/contrib/qrcode/qrcode.pdf#subsection.2.3
, steht, dass das Makro \qrcode auf ein spezielles Catcode-Régime
umschaltet bevor das Argument eingelesen wird.
Dort steht auch, welche Special Character man wie escapen soll wenn man
dieses Umschalten des Catcode-Régime unterläuft.
Unterläuft zB, indem man \qrcode zusammen mit seinem Argument als
Argument eines anderen Makros verwendet, sodass die Sache beim Tokenizen
des Arguments dieses anderen Makros bereits getokenized wird und
folglich das Umschalten auf das andere Catcode-Régime beim Verarbeiten
des Befehls \qrcode keine Wirkung hat.
Oder unterläuft, indem man Komponenten des Arguments von \qrcode in
expandible Makros packt, deren Ersetzungstext beim Definieren
getokenized wird, ohne dass ein Umschalten auf das Catcode-Régime, auf
das der Befehls \qrcode umschaltet, stattfinden würde.
Znd zwar soll man dann unter anderem Zeilenumbrüche als \? und
Leerzeichen als \ (control space) escapen.
\documentclass{scrartcl}
\usepackage[final]{qrcode}
\newcommand \qrtext {BEGIN:VCARD\?
VERSION:2.1\?
N:Name;Vorname1;;;\?
FN:Vorname1\ Name\?
END:VCARD}
\begin{document}
%%%%%%%%
\vspace{3 mm}
\qrcode[
]{BEGIN:VCARD
VERSION:2.1
N:Name;Vorname1;;;
FN:Vorname1 Name
END:VCARD}
%%%%%%%%
\vspace{30 mm}
%%%%%%%%
\vspace{3 mm}
\qrcode{\qrtext}
%%%%%%%%
\end{document}
Mit freundlichem Gruß
Ulrich
Loading...