序言中定义的自定义变量

序言中定义的自定义变量

我尝试在序言中定义一些变量,以便在那里初始化它们,然后打印在正文中。这是我尝试的

\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}

\newcommand{\cost}[1]{\def\@cost{#1}}
\newcommand{\refArticle}[1]{\def\@refArticle{#1}}

\cost{400}
\refArticle{TOTO01}

\begin{document}

This is a non-working test; it will cost \@cost dollars to buy \@refArticle.

\end{document}

它不起作用。我收到错误

! Use of \@ doesn't match its definition.

这让我很烦,因为

\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}

\newcommand{\cost}[1]{\def\@cost{#1}}
\newcommand{\refArticle}[1]{\def\@refArticle{#1}}

\cost{400}
% \refArticle{TOTO01}

\begin{document}

This is a working test; it will cost \@cost to buy what you want.

\end{document}

作品。

我可能遗漏了变量定义中的一些内容。您知道我的方法可能存在什么问题吗?

答案1

变量的形式\@cost为“内部”,其中@已定义为字母。

在您的文档正文中,@被定义为“其他”,并且该命令\@具有完全不同的含义,与您尝试执行的操作不兼容。

你可能这样做:

\makeatletter
\newcommand{\@cost}[1]{\def\cost{#1}}
\@cost{400}
\makeatother

\begin{document}

This is a working test; it will cost \cost\ to buy what you want.

还要注意后面的“斜线空格” \cost。这(或另一个保留空间的机制)是必要的,以防止成本值进入“to”。

编辑:注意大卫卡莱尔的评论——在这种情况下,最好完全避免使用@这些命令;两者都容易在文档正文中使用,@除了极少数预定义的情况外,您确实需要避免使用这些命令。(有关此信息,请参阅任何好的乳胶手册。)

相关内容