使用命令添加計數

使用命令添加計數

我有以下命令:

\newcommand{\addtonewcount}[2]{\advance\#1 #2\relax}

#1 是計數的名稱,#2 是要加入計數中的程度。

該命令傳回錯誤。如何解決這個問題?

這是一個更完整的範例:

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}

\newcommand{\addtonewcount}[2]{\advance\#1 #2\relax}

\begin{document}
\newcount\testcountone
\addtonewcount{testcountone}{7}
\end{document}

答案1

#1定義巨集時的巨集體中是使用和處理巨集時插入實際參數的地方。另一方面,\#1是一個控制序列,\#後跟令牌1。這是完全不同的事情。如果您確實想將 a 轉換name為控制序列\name(已在參數中讀取),那麼您必須使用\csname ...\endcsname一對 TeX 原語。

你的定義應該是:

\def\addtonewcount#1#2{\advance \csname#1\endcsname by#2\relax}

請注意,\csname...\endcsnameTeX 原語是可擴展的,\advanceTeX 原語在主處理器層級工作,並在擴展後讀取其參數。因此,\expandafter在這種情況下您不需要使用TeX 原語。

註2:原語by的關鍵字是可選的\advance。我在巨集中使用它是為了增加巨集程式碼的可讀性。如今,在這些情況下我們不需要節省 TeX 記憶體。 40 年前 TeX 誕生時,這一點非常重要。

答案2

這是定義\addtocounter

\addtocounter:
macro:#1#2->\@ifundefined {c@#1}{\@nocounterr {#1}}{\global \advance \csname c@#1\endcsname #2\relax }

它首先檢查計數器 #1 是否已定義,如果是,則將 #2 加到其中。

相關內容