명령 결과를 명령 인수로 어떻게 전달합니까?

명령 결과를 명령 인수로 어떻게 전달합니까?

문자열을 생성하고 나중에 사용하기 위해 저장하고 싶습니다. 그러나 다음 상황에서는 문자열 대신 명령을 저장합니다.

\newcounter{Counter}
\newcommand{\ParentNode} {NULL}
\newcommand{\ThisNode} {Node\theCounter}
\newcommand{\SetParentNode} {\renewcommand{\ParentNode}{\ThisNode}}

Current \textbf{\ThisNode} with parent \textbf{\ParentNode}.\\
\SetParentNode
Current \textbf{\ThisNode} set as parent (\ParentNode).\\
\stepcounter{Counter}
Current \textbf{\ThisNode} with parent \textbf{\ParentNode}.

그러면 다음과 같은 출력이 생성됩니다.

현재의노드0부모와 함께없는.
현재의노드0상위(Node0)로 설정합니다.
현재의노드1부모와 함께노드1.

\ParentNode이 출력은 문자열이 아닌 실제 명령을 저장했음을 알려줍니다 . 간단한 해결책이 있다고 말하지만 찾을 수 없습니다. 명령 자체 대신 명령 결과를 어떻게 전달합니까?

답변1

매크로 \SetParentNode는 데이터를 가리키는 매크로뿐만 아니라 실제 데이터도 기억할 수 있도록 확장된 의미를 가져야 합니다. 그래서 저는 \edef.

\documentclass{article}
\newcounter{Counter}
\newcommand{\ParentNode} {NULL}
\newcommand{\ThisNode} {Node\theCounter}
\newcommand{\SetParentNode} {\edef\ParentNode{\ThisNode}}
\begin{document}
\noindent
Current \textbf{\ThisNode} with parent \textbf{\ParentNode}.\\
\SetParentNode
Current \textbf{\ThisNode} set as parent (\ParentNode).\\
\stepcounter{Counter}
Current \textbf{\ThisNode} with parent \textbf{\ParentNode}.
\end{document}

여기에 이미지 설명을 입력하세요

\ThisNodeOP는 유사하게 확장해야 하는지 결정해야 합니다.정의할 때리콜 시점에 이를 확장하는 현재 접근 방식과는 대조적입니다.

답변2

\numexpreTeX 확장을 사용할 수 있는 한 카운트 레지스터를 낭비하는 대신 매크로를 사용하여 이를 수행할 수 있습니다 .

\edef나는 매크로 인수 없이 그냥 \expandafter매크로 인수를 교환 하는 변형을 구현하려고 했습니다 .

\documentclass{article}

\newcommand\exchange[2]{#2#1}

\newcommand\nodecounter{-1}%
\newcommand{\ParentNode}{PARENTOFNULL}
\newcommand\ThisNode{NULL}

\newcommand\SetThisNodeAsParentNodeAndSetNewNodeAsThisNode{%
  \expandafter\renewcommand\expandafter\ParentNode\expandafter{\ThisNode}%
  \expandafter\gdef\expandafter\nodecounter\expandafter{\number\numexpr\nodecounter+1\relax}%
  \expandafter\renewcommand
  \expandafter\ThisNode
  \expandafter{\romannumeral0\expandafter\exchange\expandafter{\nodecounter}{ Node}}%
}

\begin{document}
\SetThisNodeAsParentNodeAndSetNewNodeAsThisNode
\noindent Current \textbf{\ThisNode} with parent \textbf{\ParentNode}.

\SetThisNodeAsParentNodeAndSetNewNodeAsThisNode
\noindent Current \textbf{\ThisNode} with parent \textbf{\ParentNode}.

\SetThisNodeAsParentNodeAndSetNewNodeAsThisNode
\noindent Current \textbf{\ThisNode} with parent \textbf{\ParentNode}.
\end{document}

여기에 이미지 설명을 입력하세요

답변3

.\StepNode\stepcounter

\documentclass{article}

\newcounter{Counter}
\newcommand{\ParentNode}{NULL}
\newcommand{\ThisNode}{}% for safety
\edef\ThisNode{Node\theCounter}% initialize

\newcommand{\SetParentNode}{\let\ParentNode=\ThisNode}

\newcommand{\StepNode}{%
  \stepcounter{Counter}%
  \edef\ThisNode{Node\theCounter}%
}

\begin{document}

Current \textbf{\ThisNode} with parent \textbf{\ParentNode}.

\SetParentNode

Current \textbf{\ThisNode} set as parent (\ParentNode).

\StepNode

Current \textbf{\ThisNode} with parent \textbf{\ParentNode}.

\end{document}

여기에 이미지 설명을 입력하세요

관련 정보