计数器的条件依赖性

计数器的条件依赖性

考虑两个计数器AB,并且的初始值B与的相同A

\newcounter{A}
\newcounter{B}
\setcounter{A}{1}
\setcounter{B}{\theA}

考虑命令setAsetB改变它们。

\newcommand{\setA}[1]{\setcounter{A}{#1}}
\newcommand{\setB}[1]{\setcounter{B}{#1}}

平均能量损失

\documentclass{report}

\newcounter{A}
\newcounter{B}
\setcounter{A}{1}
\setcounter{B}{\theA}

\newcommand{\setA}[1]{\setcounter{A}{#1}}
\newcommand{\setB}[1]{\setcounter{B}{#1}}

\begin{document}
A=\theA

B=\theB

\medskip
\setA{3}

A=\theA

B=\theB

\medskip
\setB{5}

A=\theA

B=\theB
\end{document}

在此处输入图片描述

第一种变体

假设我们想B在改变时也改变A。所以我们可以定义

\newcommand{\setA}[1]{\setcounter{A}{#1}\setcounter{B}{\theA}}

但在这种情况下,如果我们B在改变之后再进行改变A,它们就会有所不同。

第一届

\documentclass{report}

\newcounter{A}
\newcounter{B}
\setcounter{A}{1}
\setcounter{B}{\theA}

\newcommand{\setA}[1]{\setcounter{A}{#1}\setcounter{B}{\theA}}
\newcommand{\setB}[1]{\setcounter{B}{#1}}

\begin{document}
A=\theA

B=\theB

\medskip
\setA{3}

A=\theA

B=\theB

\medskip
\setB{5}

A=\theA

B=\theB
\end{document}

在此处输入图片描述

如果我们B先改,后改A,那么前一个\theB就会丢失,当然它们是相等的。

\begin{document}
\setB{5}

A=\theA

B=\theB

\medskip
\setA{3}

A=\theA

B=\theB

\medskip

A=\theA

B=\theB
\end{document}

在此处输入图片描述

期望输出

我想让B依赖A 当且仅当\setB未使用命令任何地方在代码中。

换句话说,下面的代码将产生

在此处输入图片描述

\begin{document}
\setB{5}

A=\theA

B=\theB

\medskip
\setA{3}% from here I want to keep \theB because it was used

A=\theA

B=\theB

\medskip

A=\theA

B=\theB
\end{document}

答案1

像这样吗?

\documentclass{report}

\newcounter{A}
\newcounter{B}
\setcounter{A}{1}
\setcounter{B}{\value{A}}


\newif\ifB
\Bfalse


\newcommand{\setA}[1]{\setcounter{A}{#1}\ifB\else\setcounter{B}{#1}\fi}
\newcommand{\setB}[1]{\global\Btrue\setcounter{B}{#1}}

\begin{document}


\setB{5}

A=\theA

B=\theB

\medskip
\setA{3}

A=\theA

B=\theB

\medskip

A=\theA

B=\theB



\end{document}

在此处输入图片描述

答案2

B这里有一个选项:让打印表示\theA直到\setB被使用。

在此处输入图片描述

\documentclass{article}

\newcounter{A}
\newcounter{B}
\setcounter{A}{1}
\setcounter{B}{\value{A}}
\renewcommand{\theB}{\theA}

\newcommand{\setA}[1]{\setcounter{A}{#1}}
\newcommand{\setB}[1]{\renewcommand{\theB}{\arabic{B}}\setcounter{B}{#1}}

\begin{document}

\setB{5}

A=\theA

B=\theB

\medskip
\setA{3}

A=\theA

B=\theB

\medskip

A=\theA

B=\theB

\end{document}

请注意,我们使用\value{A}设置B而不是\theB因为后者可能不是数字。

相关内容