
Hier ist ein MWE. Ich verwende eine Token-Liste und kann 10 und Oktober in die endgültige PDF-Datei bekommen.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_my_tl
\prop_new:N \l_my_prop
\NewDocumentCommand{\myset}{m}
{
\tl_set:Nn \l_my_tl { #1 }
\prop_put:Nnn \l_my_prop {test} {#1}
}
\NewDocumentCommand{\myget}{}
{
\tl_use:N \l_my_tl
%%% comment out the above line and uncomment the below lines
% \prop_get:NnN \l_my_prop {test} \l_tmpa_tl
% \tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\newcommand\MonthName[1]{%
\ifcase#1\relax\or
January \or Feburary \or March
\or April \or May \or June
\or July \or August \or September
\or October \or November \or December
\else#1\fi
}
\myset{10}
\begin{document}
\myget\\
\MonthName{\myget}
\end{document}
Wenn ich dann zur Prop-Liste wechsle (wie der Kommentar sagt), das heißt,
\NewDocumentCommand{\myget}{}
{
\prop_get:NnN \l_my_prop {test} \l_tmpa_tl
\tl_use:N \l_tmpa_tl
}
Es wird ein Fehler gemeldet für\MonthName{\myget}
! Missing number, treated as zero.
\prop_get
ruft den mit dem Schlüssel gespeicherten Wert test
aus der Eigenschaftsliste ab \l_my_prop
und platziert ihn in der Tokenlistenvariable \l_tmpa_tl
. Und ich verwende diese Variable. Im Vergleich zum ersten Fall denke ich, dass es etwas damit zu tun hat \prop_get
. Aber ich weiß nicht, wie ich es beheben kann.
Antwort1
\prop_get:NnN
ist nicht erweiterbar, Sie können es also nicht direkt in verwenden \ifcase
. Beim \ifcase
Versuch zu erweitern \myget
(was aufgrund von nicht erweiterbar ist \prop_get:NnN
), schlägt dies fehl und TeX gibt aus Missing number, treated as zero
.
Allerdings ist die Zuweisung, die Sie vornehmen, \l_tmpa_tl
grundsätzlich nutzlos, daher können Sie diesen Schritt überspringen und \prop_item:Nn
direkt verwenden, was erweiterbar ist, und \myget
mit erweiterbar machen \NewExpandableDocumentCommand
:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_my_tl
\prop_new:N \l_my_prop
\NewDocumentCommand{\myset}{m}
{
\tl_set:Nn \l_my_tl { #1 }
\prop_put:Nnn \l_my_prop {test} {#1}
}
\NewExpandableDocumentCommand{\myget}{}
{
% \tl_use:N \l_my_tl
%%% comment out the above line and uncomment the below lines
\prop_item:Nn \l_my_prop {test}
}
\ExplSyntaxOff
\newcommand\MonthName[1]{%
\ifcase#1\relax\or
January \or Feburary \or March
\or April \or May \or June
\or July \or August \or September
\or October \or November \or December
\else#1\fi
}
\myset{10}
\begin{document}
\myget\\
\MonthName{\myget}
\end{document}
Sie können mehr verwenden expl3
-j \int_case:nn
sowie:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_my_tl
\prop_new:N \l_my_prop
\NewDocumentCommand{\myset}{m}
{
\tl_set:Nn \l_my_tl { #1 }
\prop_put:Nnn \l_my_prop {test} {#1}
}
\NewExpandableDocumentCommand{\myget}{}
{
\prop_item:Nn \l_my_prop {test}
}
\NewExpandableDocumentCommand{\MonthName}{m}
{
\int_case:nnF { #1 }
{
{ 1 } { January }
{ 2 } { Feburary }
{ 3 } { March }
{ 4 } { April }
{ 5 } { May }
{ 6 } { June }
{ 7 } { July }
{ 8 } { August }
{ 9 } { September }
{ 10 } { October }
{ 11 } { November }
{ 12 } { December }
}
{ \int_eval:n {#1} }
}
\ExplSyntaxOff
\myset{10}
\begin{document}
\myget\\
\MonthName{\myget}
\end{document}