koma 변수와 함께 qrcode를 사용하시나요?

koma 변수와 함께 qrcode를 사용하시나요?

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 변수 대신 사용하는 것입니다.\usekomavarfromemail\fromemail

\documentclass{scrlttr2}

\setkomavar{fromemail}{[email protected]}
\usepackage[final]{qrcode}
\usekomavar[\def\fromemail]{fromemail}
\begin{document}
    \qrcode{mailto:\fromemail}
\end{document}

관련 정보