Условная зависимость счетчиков

Условная зависимость счетчиков

Рассмотрим два счетчика Aи B, начальное значение которого Bтакое же, как и у A.

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

Рассмотрите команды setAи setBизмените их.

\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}

введите описание изображения здесь

1-й вариант

Предположим, что мы хотим измениться также, Bкогда мы изменяем A. Таким образом, мы могли бы определить

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

Но в этом случае, если мы изменимся Bпосле того, как изменились, Aони будут другими.

1-й МВЭ

\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

Вот вариант: пусть используется представление Bprint \theAuntil .\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}to set Bвместо , \theBпоскольку последний может не быть числовым.

Связанный контент