如何定义全局变量?

如何定义全局变量?

如何定义全局变量?

如何定义全局变量?如果“全局变量”是编程中唯一使用的术语,那么我想要的是一种存储某些内容并在需要时更改或使用它的方法。

以下是我的方法

\documentclass{article}
\newcommand{\varx}{}
\newcommand{\setx}[1]{\renewcommand{\varx}{#1}}
\begin{document}
\setx{abc}
\varx
\setx{def}
\varx
\end{document}

存在问题:

  1. 我必须对每个变量使用单独的命令来更改它们的值。
  2. 这看起来很奇怪。好像应该有另一个命令来执行此操作。(只是我不知道。)

顺便说一句,我不知道该使用什么标签。

答案1

TeX 提供 token 寄存器。您可以通过 声明一个新的 token 寄存器,通过或\newtoks\abc将值设置为该寄存器,并通过 使用该值。问题是声明一个控制序列而不检查它是否已经定义,因此是允许的,但您的 LaTeX 文档(如果您使用的是 LaTeX,原文如此)在此之后会被损坏。我建议定义一个宏,该宏仅在声明的控制序列未定义时运行。该宏具有以下语法\abc={value}\abc{value}\the\abc\newtoks\newtoks\end\declvar\newtoks

\declvar\sequence {default value}

实现及测试如下:

\def\declvar #1{%
   \ifx#1\undefined 
       \newtoks#1#1%
   \else
      \errmessage{\string\declvar: \string#1 cannot be var, it is defined already}%
      \toks0
   \fi}

\declvar\abc {default value}

\the\abc  % expands to "default value"

\abc={new value}

\the\abc  % expands to "new value"

\declvar\begin {default} % throws error message

答案2

您也可以使用 \def \variablename {variable}

例如

\def  \varx {2}
\varx

\def \varx {a+b=400}
\varx

输出如下: 输出

只要小心不要使用 Latex 使用的任何东西(例如,不要使用 \def \begin{3})

答案3

目前还不清楚这些“变量”应该包含什么。通用容器被称为expl3“令牌列表”。

您可以使用某种命名空间来解决已定义命令的问题。

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\setvar}{mm}
 {
  % clear an existing variable or allocate a new one
  \tl_clear_new:c { g__youthdoo_var_#1_tl }
  % set to the stated value
  \tl_gset:cn { g__youthdoo_var_#1_tl } { #2 }
 }

\NewExpandableDocumentCommand{\usevar}{m}
 {
  % deliver the contents
  \tl_use:c { g__youthdoo_var_#1_tl }
 }

\ExplSyntaxOff

\begin{document}

\setvar{x}{abc}

\usevar{x}

\setvar{x}{def}

\usevar{x}

\end{document}

在此处输入图片描述

还有更具体的变量类型,例如浮点数。

相关内容