我必须定义许多具有一些默认值的文本变量。
我按照下面的方法做:
\def\name#1{\gdef\@name{#1}}%
\name{Alex}
我尝试过自动化这个过程,但没有成功
\newcommand{\DefineAndSet}[2]{%
\def\csname #1\endcsname ##1{\gdef\@\csname #1\endcsname{##1}}%
\csname #1\endcsname{#2}
}
我的 MNWE:
\documentclass{article}
\newcommand{\DefineAndSet}[2]{%
\def\csname #1\endcsname ##1{\gdef\@\csname #1\endcsname{##1}}%
\csname #1\endcsname{#2}
}
\begin{document}
\DefineAndSet{name}{Alex}
\name
\end{document}
答案1
您的代码中存在几个错误:您需要使用\csname
before构建符号标记\def
或\gdef
查看它。并且@
应该放在里面\csname
。
\newcommand{\DefineAndSet}[2]{%
\expandafter\def\csname #1\endcsname ##1{\expandafter\gdef\csname @#1\endcsname{##1}}%
\csname #1\endcsname{#2}%
}
另一方面,我认为没有必要执行该\@name
命令。
\newcommand{\DefineAndSet}[2]{%
\expandafter\gdef\csname #1\endcsname{#2}%
#2%
}
会满足您的需要。但是有一个问题:您没有检查\name
(或从 的第一个参数生成的任何内容\DefineAndSet
)是否已经定义。这可以通过以下方法克服
\makeatletter
\newcommand{\DefineAndSet}[2]{%
\@ifdefinable{#1}{\gdef#1{#2}}#2%
}
\makeatother
简单地称为
\DefineAndSet{\name}{Alex}