Estaba intentando usar el \foreach
bucle de tikz para acortar una lista de formularios. Dentro de cada fórmula, solo cambia un índice, así que pensé que podría usar foreach
dentro de un align
entorno escribir cada fórmula en una línea. Esto no funciona a menos que elimine los saltos de línea \\
posteriores r^2
. ¿Hay alguna forma de utilizar saltos de línea dentro 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}
Respuesta1
Estás usando un mazo para una tarea sencilla de copiar y pegar. De todos modos, esto no puede funcionar por al menos dos razones: el código de cada \foreach
ciclo se ejecuta en un grupo y align
construye una tabla igual que tabular
, por lo que cada celda también forma un grupo.
Incluso si \foreach
no encerrara cada ciclo en un grupo, no podría abarcar células.
Túpodríahacer
\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}
¿Vale la pena la molestia? Tenga en cuenta que los comandos "arriesgados" como \text
deben tener el prefijo \noexpand
(no solo \text
, por supuesto). Además, \\
al final se produciría una línea no deseada.
Aquí hay una versión mejor:
\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}
El resultado es el mismo que antes.
El argumento opcional \mathrepeat
es el nombre del entorno a utilizar; por ejemplo \mathrepeat[align]{1,2,3}{...}
numeraría las líneas.
\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}
Respuesta2
\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}