Dependência condicional de contadores

Dependência condicional de contadores

Considere dois contadores Ae Bo valor inicial de Bé igual a de A.

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

Considere os comandos setAe setBaltere-os.

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

MWE

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

insira a descrição da imagem aqui

1ª variante

Suponhamos que também queremos mudar Bquando mudamos A. Então poderíamos definir

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

Mas neste caso, se mudarmos Bdepois de termos mudado, Aeles serão diferentes.

1º MWE

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

insira a descrição da imagem aqui

Se mudarmos Bprimeiro e depois se mudarmos A, os anteriores \theBserão perdidos e claro que serão iguais.

\begin{document}
\setB{5}

A=\theA

B=\theB

\medskip
\setA{3}

A=\theA

B=\theB

\medskip

A=\theA

B=\theB
\end{document}

insira a descrição da imagem aqui

Saída desejada

Eu gostaria de tornar Bdependente deA se e apenas seo comando \setBnão foi usadoem qualquer lugarno código.

Em outras palavras, o código abaixo produziria

insira a descrição da imagem aqui

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

Responder1

Algo assim?

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

insira a descrição da imagem aqui

Responder2

Aqui está uma opção: Deixe a representação de Bprint \theAUntil \setBser usada.

insira a descrição da imagem aqui

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

Observe que usamos \value{A}to set Bem vez de, \theBpois o último pode não ser numérico.

informação relacionada