在公式中使用 foreach 迴圈?

在公式中使用 foreach 迴圈?

我試圖使用\foreachtikz 的循環來縮短 formlas 列表。在每個公式中,只有一個索引發生變化,所以我認為我可以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}

在此輸入影像描述

相關內容