수식 내에서 foreach 루프를 사용하시겠습니까?

수식 내에서 foreach 루프를 사용하시겠습니까?

\foreach나는 형식 목록을 단축하기 위해 tikz의 루프를 사용하려고 했습니다 . 각 수식 내에서는 인덱스만 변경되므로 환경 foreach내에서 사용할 수 있다고 생각하여 align각 수식을 한 줄에 작성했습니다. \\뒤에 줄 바꿈을 제거하지 않으면 작동하지 않습니다 r^2. 내에서 줄 바꿈을 사용하는 방법이 있습니까 foreach?

\documentclass[10pt]{article}
\usepackage{tikz}    % for foreach
\usepackage{amsmath} % for align

\begin{document}

\begin{align*}
\foreach \i in {1,2,3}{ (x_\i - x_c)^2 + (y_\i - y_c)^2 =  r^2  \\ }
\end{align*}

\end{document}

답변1

복사-붙여넣기를 사용하는 간단한 작업을 위해 큰 망치를 사용하고 있습니다. 어쨌든, 이것은 적어도 두 가지 이유로 작동할 수 없습니다. 모든 주기의 코드가 \foreach그룹에서 실행되고 와 align동일한 테이블을 구축 tabular하므로 각 셀도 그룹을 형성합니다.

\foreach각 주기를 그룹으로 묶지 않더라도 셀에 걸쳐 있을 수는 없습니다 .

~할 수 있었다하다

\documentclass[10pt]{article}
\usepackage{pgffor}    % for foreach
\usepackage{amsmath} % for align
\usepackage{etoolbox}

\newcommand{\aligntemp}{}

\begin{document}

\gdef\aligntemp{}%
\foreach \i in {1,2,3}{%
  \xappto\aligntemp{(x_\i - x_c)^2 + (y_\i - y_c)^2 &=  r^2  \noexpand\\ }%
}%
\begin{align*}
\aligntemp
\end{align*}

\end{document}

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

고생할 가치가 있나요? 와 같은 "위험한" 명령에는 (물론 뿐만 아니라 ) \text접두사가 붙어야 합니다 . 또한 결국에는 원하지 않는 라인이 생성됩니다.\noexpand\text\\

더 나은 버전은 다음과 같습니다.

\documentclass[10pt]{article}
\usepackage{xparse}                 
\usepackage{amsmath} 

\ExplSyntaxOn
\NewDocumentCommand{\mathrepeat}{O{align*}mm}
 {
  \seq_clear:N \l_flawr_mathrepeat_seq
  \clist_map_inline:nn {#2}
   {
    \seq_put_right:Nn \l_flawr_mathrepeat_seq { #3 }
   }
  \begin{#1}\seq_use:Nn \l_flawr_mathrepeat_seq { \\ }\end{#1}
 }
\seq_new:N \l_flawr_mathrepeat_seq
\ExplSyntaxOff

\begin{document}

\mathrepeat{1,2,3}{
 (x_{#1} - x_c)^2 + (y_{#1} - y_c)^2 &=  r^2
}

\end{document}

출력은 이전과 동일합니다.

선택적 인수는 \mathrepeat사용할 환경의 이름입니다. 예를 들어 \mathrepeat[align]{1,2,3}{...}줄 번호를 매길 것입니다.

\documentclass[10pt]{article}
\usepackage{xparse}
\usepackage{amsmath}

\ExplSyntaxOn
\NewDocumentCommand{\mathrepeat}{O{align*}mm}
 {
  \seq_clear:N \l_flawr_mathrepeat_seq
  \clist_map_inline:nn {#2}
   {
    \seq_put_right:Nn \l_flawr_mathrepeat_seq { #3 }
   }
  \begin{#1}\seq_use:Nn \l_flawr_mathrepeat_seq { \\ }\end{#1}
 }
\seq_new:N \l_flawr_mathrepeat_seq
\ExplSyntaxOff

\begin{document}

\mathrepeat[align]{1,2,3}{
 (x_{#1} - x_c)^2 + (y_{#1} - y_c)^2 &=  r^2 \label{myeqs#1}
}

We see in \eqref{myeqs1}--\eqref{myeqs3} that \dots

\end{document}

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

답변2

\documentclass[10pt]{article}
\usepackage{tikz}    % for foreach
\usepackage{amsmath} % for align

\begin{document}
\foreach \i in {1,2,3}{\expandafter\xdef\csname eq\i\endcsname{%
 (x_\i - x_c)^2 + (y_\i - y_c)^2 =  r^2}}
\begin{align*}
\csname eq1\endcsname\\
\csname eq2\endcsname\\
\csname eq3\endcsname
\end{align*}

\end{document}

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

관련 정보