\pgfmathsetmacro로 불완전한 \iffalse

\pgfmathsetmacro로 불완전한 \iffalse

\foreach테이블의 항목이 행과 열에 따라 달라지도록 명령을 사용하여 테이블을 생성하고 싶습니다 . 다음 코드를 테스트하고 싶었습니다.

\documentclass{article}
\usepackage{pgffor,etoolbox}   
\newcommand*\tas[2]{
\pgfmathsetmacro{\sat}{#1+#2}
\sat
}    
\newcommand*\mytablecontents{}
\foreach \i in {1,...,7}{
\foreach \j in {1,...,7}{
    \xappto\mytablecontents{\tas{\i}{\j}}
    \gappto\mytablecontents{&}
  }
  \gappto\mytablecontents{\\}
}    
\begin{document}    
\begin{tabular}{c|cc|ccc|cc}
  \mytablecontents
\end{tabular}   
\end{document}

그러면 "불완전 \iffalse" 오류가 발생합니다. 이 오류의 원인은 \pgfmathsetmacro. 이 문제를 처리하는 방법을 아는 사람이 있나요?

답변1

\pgfmathsetmacro\edef확장할 수 없으므로 an ( \xapptovariant에서는 평가됨 ) 에서 "평가"되지 않습니다 \xdef.

먼저 합계를 계산하여 매크로에 저장한 다음 확장된 버전을 추가할 수 있습니다.

\documentclass{article}
\usepackage{pgffor,etoolbox}

\newcommand*\tas[2]{%
  \pgfmathsetmacro{\sat}{#1+#2}%
}
\newcommand*\mytablecontents{}
\foreach \i in {1,...,7}{%
\foreach \j in {1,...,7}{%
    \tas{\i}{\j}%
    \xappto\mytablecontents{\sat &}
  }%
  \gappto\mytablecontents{\\}
}

\begin{document}

\begin{tabular}{c|cc|ccc|cc}
  \mytablecontents
\end{tabular}

\end{document}

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

또는 확장 가능한 산술을 사용할 수 있습니다. 다음 과 expl3함께 제공합니다 .xfp\fpeval

\documentclass{article}
\usepackage{pgffor,etoolbox,xfp}

\newcommand*\mytablecontents{}
\foreach \i in {1,...,7}{%
\foreach \j in {1,...,7}{%
    \xappto\mytablecontents{\fpeval{\i+\j}&}
  }%
  \gappto\mytablecontents{\\}
}

\begin{document}

\begin{tabular}{c|cc|ccc|cc}
  \mytablecontents
\end{tabular}

\end{document}

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

기능을 표시하기 위해( pgfmath그러나 모든 기능을 사용할 수는 없음) 호출 \xappto

\xappto\mytablecontents{\fpeval{round(\i*sqrt(\j),2)}&}

출력은

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

전체 코드에서도 동일한 결과가 나타납니다 expl3.

\documentclass{article}
\usepackage{expl3}

\ExplSyntaxOn
\tl_clear:N \l_tmpa_tl
\int_step_inline:nnnn { 1 } { 1 } { 7 }
 { % outer cycle: #1
  \int_step_inline:nnnn { 1 } { 1 } { 7 }
   { % inner cycle: ##1
    \tl_put_right:Nx \l_tmpa_tl { \fp_eval:n {round(#1*sqrt(##1),2)} & }
   }
  \tl_put_right:Nn \l_tmpa_tl { \\ }
 }
\tl_set_eq:NN \mytablecontents \l_tmpa_tl
\ExplSyntaxOff

\begin{document}    

\begin{tabular}{c|cc|ccc|cc}
  \mytablecontents
\end{tabular}   

\end{document}

는 ( e를 의미함 )과 \tl_put_right:Nx유사하다는 점에 유의하십시오.\eapptox엑스panded) 와 \tl_put_right:Nn유사합니다 \appto. \int_step_inline:nnnn사이클 그룹화를 사용하지 않으므로 전역 정의가 필요하지 않습니다 . 현재 인덱스는 #1(또는 ##1내부 루프에서) 직접 사용할 수 있습니다.

답변2

이를 사용하지 않으려면 내부 루프의 newcommand옵션을 사용하여 동일한 결과를 계산할 수 있습니다 .[evaluate = \j as \c using int(\i+\j)]\foreach

\documentclass{article}
\usepackage{pgffor,etoolbox}

\newcommand*\mytablecontents{}
\foreach \i in {0,...,7}{
  \foreach \j [evaluate = \j as \c using int(\i+\j)] in {0,...,7}{
    \xappto\mytablecontents{\c}
    \gappto\mytablecontents{&}
  }
  \gappto\mytablecontents{\\}
}

\begin{document}

\begin{tabular}{c|cc|ccc|cc}
  \mytablecontents
\end{tabular}

\end{document}

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

다음을 사용할 수도 있습니다.

\newcommand*\mytablecontents{}
\foreach \i in {0,...,7}{
  \foreach \j in {0,...,7}{
    \pgfmathtruncatemacro\c{\i+\j}
    \xappto\mytablecontents{\c}
    \gappto\mytablecontents{&}
  }
  \gappto\mytablecontents{\\}%
}

답변3

귀하의 실행

\xappto\mytablecontents{\tas{\i}{\j}}

확장 가능 하다고 가정합니다 \tas{.}{.}. 그러나 할당( \pgfmathsetmacro)이 포함되어 있으므로 그렇지 않습니다. 따라서 app에 대한 종료 의 일부로 표현식을 포함하기 전에 먼저 표현식을 평가(확장)해야 합니다 \mytablecontents. 표현식은 매우 간단하므로(두 개의 숫자 추가) 다음을 사용할 수 있습니다 \number\numexpr#1+#2.

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

\documentclass{article}

\usepackage{pgffor,etoolbox}

\newcommand*\tas[2]{%
  \number\numexpr#1+#2\relax
}

\newcommand*\mytablecontents{}
\foreach \i in {1,...,7}{
  \foreach \j in {1,...,7}{
    \xappto\mytablecontents{\tas{\i}{\j}}
    \gappto\mytablecontents{&}
  }
  \gappto\mytablecontents{\\}
}

\begin{document}

\begin{tabular}{c|cc|ccc|cc}
  \mytablecontents
\end{tabular}

\end{document}

\fp_evalLaTeX3에서 LaTeX2e 인터페이스를 통해 확장 가능한 계산이 쉽게 가능합니다.xfp패키지:

\usepackage{pgffor,xfp,etoolbox}

\newcommand*\mytablecontents{}
\foreach \i in {1,...,7}{
  \foreach \j in {1,...,7}{
    \xappto\mytablecontents{\fpeval{\i+\j}}
    \gappto\mytablecontents{&}
  }
  \gappto\mytablecontents{\\}
}

관련 정보