用Java解释我想要什么:
String myTitle = "";
// Later on in the main method
myTitle = "";
System.out.println(myTitle);
我基本上只是想用 newcommand 创建一个新变量,稍后在序言中赋予它一个值,这样我就可以在开始文档后输出该变量。
\documentclass{scrartlc}
\newcommand{\myVariable}{}
\myVariable{FOOBAR}
\begin{document}
\myVariable
\end{document}
答案1
标准方法是使用命令为某些宏赋予含义,然后在需要时使用该宏。
你可能做
\newcommand{\myVariable}[1]{\renewcommand{\myVariable}{#1}}
但这有几个缺点:
- 您必须事先知道要命名和使用什么变量;
- 一旦设置该值,则无法更改;
- 这会不必要地混淆设置和使用。
最好执行一个通用变量定义命令:
\newcommand{\defineVariable}[2]{\newcommand{#1}{#2}}
并像使用它一样
\defineVariable{\myVariable}{FOOBAR}
但是这不允许重新定义。使用\def#1{#2}
非常危险,因为它会接受类似
\definevariable{\def}{FOOBAR}
显然,混乱将随之而来。
有一种更巧妙的方法,甚至可以让您摆脱 后面空格的问题\myVariable
。此外,user@variable@
前缀还可以避免重新定义重要命令的风险。
\documentclass{article}
\makeatletter
\newcommand{\defineVariable}[2]{%
\expandafter\def\csname user@variable@#1\endcsname{#2}%
}
\newcommand{\useVariable}[1]{%
\ifcsname user@variable@#1\endcsname
\csname user@variable@#1\endcsname
\else
\@latex@error{Undefined variable '#1'}{The variable '#1' has never been defined}%
ERRONEOUS VARIABLE%
\fi
}
\makeatother
\begin{document}
\defineVariable{myVar}{FOOBAR}
\useVariable{myVar} is very useful.
\defineVariable{myVar}{something else}
\useVariable{myVar} is very useful.
\useVariable{undefined} is undefined
\end{document}
控制台输出:
! LaTeX Error: Undefined variable 'undefined'.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.27 \useVariable{undefined}
is undefined
? h
The variable 'undefined' has never been defined
?
一种expl3
实现(没有引发错误以保持可扩展性,尽管可以添加)。
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\defineVariable}{mm}
{
\prop_put:Nnn \l__user_variables_prop { #1 } { #2 }
}
\NewExpandableDocumentCommand{\useVariable}{m}
{
\prop_if_in:NnTF \l__user_variables_prop { #1 }
{
\prop_item:Nn \l__user_variables_prop { #1 }
}
{
ERRONEOUS~VARIABLE
}
}
\prop_new:N \l__user_variables_prop
\ExplSyntaxOff
\begin{document}
\defineVariable{myVar}{FOOBAR}
\useVariable{myVar} is very useful.
\defineVariable{myVar}{something else}
\useVariable{myVar} is very useful.
\useVariable{undefined} is undefined
\end{document}
答案2
您可以声明\myVariable
为令牌寄存器
\newtoks\myVariable
然后用户可以为其设置一个值
\myVariable{FOOBAR}
然后你可以在宏中使用该值
\the\myVariable
答案3
我非常喜欢@wipet 的回答(我不知道你可以这样做!),但我想我会发布我通常如何解决与你相同的问题,
\providecommand
定义变量(及其默认值),并\renewcommand
为其分配一个新值(可能多次):
\documentclass{article}
\providecommand{\myVariable}{Default Value}
\begin{document}
\begin{itemize}
\item Default value is: ``\myVariable''
\item \renewcommand{\myVariable}{First Updated value}
First updated value is: ``\myVariable''
\item \renewcommand{\myVariable}{Second Updated value}
Second updated value is: ``\myVariable''
\end{itemize}
\end{document}
希望能帮助到你!