Foreach-Schleife innerhalb von Formeln verwenden?

Foreach-Schleife innerhalb von Formeln verwenden?

\foreachIch habe versucht, die Schleife von Tikz zu verwenden, um eine Liste von Formeln zu kürzen. Innerhalb jeder Formel ändert sich nur ein Index, also dachte ich, ich könnte foreachinnerhalb einer alignUmgebung jede Formel in eine Zeile schreiben. Das funktioniert jedoch nicht, wenn ich die Zeilenumbrüche \\nach nicht entferne r^2. Gibt es eine Möglichkeit, Zeilenumbrüche innerhalb von zu verwenden 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}

Antwort1

Sie verwenden einen Vorschlaghammer für eine einfache Aufgabe mit Kopieren und Einfügen. Das kann aus mindestens zwei Gründen nicht funktionieren: Der Code jedes \foreachZyklus wird in einer Gruppe ausgeführt und alignerstellt eine Tabelle auf die gleiche Weise wie tabular, sodass jede Zelle ebenfalls eine Gruppe bildet.

Selbst wenn \foreachnicht jeder Zyklus in einer Gruppe eingeschlossen wäre, könnte er nicht zwischen Zellen hin- und herspringen.

DukönnteTun

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

Bildbeschreibung hier eingeben

Ist es den Aufwand wert? Beachten Sie, dass „riskante“ Befehle wie \textmit dem Präfix beginnen sollten ( natürlich \noexpandnicht nur ). Außerdem würde am Ende eine unerwünschte Zeile entstehen.\text\\

Hier ist eine bessere Version:

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

Die Ausgabe ist die gleiche wie zuvor.

Das optionale Argument \mathrepeatist der Name der zu verwendenden Umgebung; beispielsweise \mathrepeat[align]{1,2,3}{...}würde die Zeilen nummeriert.

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

Bildbeschreibung hier eingeben

Antwort2

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

Bildbeschreibung hier eingeben

verwandte Informationen