koma 변수를 입력으로 사용하여 LaTeX에서 qr 코드를 생성하는 방법이 있습니까?
패키지를 사용하고 qrcode
있는데 모든 것이 잘 작동하고 패키지도 사용하기 쉽습니다. 그러나 텍스트 LaTeX의 입력으로 koma 변수를 사용하려고 하면 충돌이 발생합니다.
이것은 작동합니다:
\documentclass{scrlttr2}
\usepackage[final]{qrcode}
\setkomavar{fromemail}{[email protected]}
\newcommand{\texttoconvert}{mailto:[email protected]}
\begin{document}
\begin{letter}{}
\qrcode[height=1.5cm]{\texttoconvert}
\end{letter}
\end{document}
하지만 다음은 그렇지 않습니다.
\documentclass{scrlttr2}
\usepackage[final]{qrcode}
\setkomavar{fromemail}{[email protected]}
\newcommand{\texttoconvert}{mailto:\usekomavar{fromemail}}
\begin{document}
\begin{letter}{}
\qrcode[height=1.5cm]{\texttoconvert}
\end{letter}
\end{document}
왜 그런 겁니까? qrcode에서 직접 koma 변수를 사용하는 것도 작동하지 않습니다...
답변1
명령은 \usekomavar
확장할 수 없습니다. 확장 가능한 버전을 정의할 수 있습니다(변수가 실제로 정의되었는지 확인하지 않으므로 주의하세요).
\documentclass{scrlttr2}
\usepackage[final]{qrcode}
\setkomavar{fromemail}{[email protected]}
\newcommand{\texttoconvert}{mailto:\expkomavar{fromemail}}
\makeatletter
\NewExpandableDocumentCommand{\expkomavar}{sO{\@firstofone}m}{%
\IfBooleanTF{#1}{% \expkomavar*
\expkomavar@name{#2}{#3}%
}{% \expkomavar
\expkomavar@var{#2}{#3}%
}%
}
\newcommand{\expkomavar@name}[2]{#1{\@nameuse{scr@#2@name}}}
\newcommand{\expkomavar@var}[2]{#1{\@nameuse{scr@#2@var}}}
\makeatother
\begin{document}
\begin{letter}{}
\qrcode[height=1.5cm]{\texttoconvert}
\bigskip
\qrcode[height=1.5cm]{mailto:[email protected]}
\end{letter}
\end{document}
두 개의 QR 코드는 우리가 찾은 로그 파일에서 볼 수 있듯이 동일합니다.
<Reading QR code for "mailto:[email protected]" at level 2-Q from aux file.>
두 번째 경우에는 패키지가 이전에 빌드된 것과 동일하다는 것을 인식한다는 의미입니다.
답변2
불행하게도 \usekomavar
완전히 확장 가능하지 않습니다. Koma-Script 매뉴얼(2022-10-12), sec의 해당 문서를 참조하세요.4.5. 변수.
그러나 \usekomavar
변수 값에 따라 작동하는 "스타일링" 명령을 선택적 인수로 허용합니다. 즉, 이후 \setkomavar{<name>}{<content>}
,
\usekomavar[\mycmd]{<name>}
% is equivalent to
\mycmd{<content>}
OP의 사용 사례에 이 트릭을 적용합니다.
\documentclass{scrlttr2}
\usepackage[final]{qrcode}
\setkomavar{fromemail}{[email protected]}
\newcommand{\QRmailto}[2][]{\qrcode[#1]{mailto:#2}}
\begin{document}
\begin{letter}{}
\usekomavar[{\QRmailto[height=1.5cm]}]{fromemail}
\end{letter}
\end{document}
이제 qr 코드로 인코딩할 텍스트가 에 전달되기 전에 토큰화되므로 \qrcode
특수 문자( #$&^_~%␣\{}
)를 이스케이프해야 할 수 있습니다( \#\$\&\^\_\~\%\␣\\\{\}
). qrcode
패키지 문서(2015/01/08 v1.51), 초를 참조하세요. 2.3특수 문자.
\documentclass{scrlttr2}
\usepackage[final]{qrcode}
\setkomavar{fromemail}{[email protected]}
% \myQrcode[<opts>]{<pre>}{<post>}{<text>}
% => \qrcode [<opts>]{<pre><text><post>}
\newcommand{\myQrcode}[4][]{\qrcode[#1]{#2#4#3}}
\begin{document}
\begin{letter}{}
\usekomavar
[{\myQrcode[height=1.5cm]
{mailto:}
{?subject=ABC/123&body=Hello\ and\ welcome}}]
{fromemail}
% <QR code requested for "mailto:[email protected]?subject=ABC/123&body=Hello and welcome" in version 0-M.>
\end{letter}
\end{document}
답변3
\usekomavar
저는 Markus Kohm(koma-script 작성자)과 이야기를 나눴고 그는 koma-script의 의도된 솔루션은 koma-변수를 선택적 변수의 첫 번째 매개변수로 확장하는 기능을 사용하는 것이라고 말했습니다 \usekomavar[<command>]{<komavariable>}
.
이와 같이:
\newcommand*{\qrcodewithprefix}[2][mailto:]{\qrcode{#1#2}}
\usekomavar[\qrcodewithprefix]{fromemail}
또는 더 짧게:
\usekomavar[\def\fromemail]{fromemail}
\qrcode{mailto:\fromemail}
그의 주된 이유는 이 솔루션(보다 낮은 수준의 솔루션과 비교하여)이 유용한 오류 메시지를 제공하기 때문입니다.
koma-variable에 오타를 시도하고 \usekomavar[\def\fromemail]{frommail}
대신 쓰면 다음과 같은 오류 메시지가 나타납니다.
Class scrlttr2 Error: KOMA-Script variable not defined. \usekomavar[\def\fromemail]{frommail}
다음을 대신 사용하면 이런 일이 발생하지 않습니다.
\def\fromemail{example-\csname scr@fromemail@var\endcsname}
오타를 입력하면 매우 혼란스러울 뿐입니다.
Undefined control sequence. \qrcode{mailto:\fromemail}
요약하면 쉽고 깔끔한 해결책은 koma 변수의 내용을 정의 \fromemail
하고 확장 한 다음 확장된 변형이 필요할 때 koma 변수 대신 사용하는 것입니다.\usekomavar
fromemail
\fromemail
\documentclass{scrlttr2}
\setkomavar{fromemail}{[email protected]}
\usepackage[final]{qrcode}
\usekomavar[\def\fromemail]{fromemail}
\begin{document}
\qrcode{mailto:\fromemail}
\end{document}