Configurar un entorno para etiquetar automática y aleatoriamente ecuaciones con símbolos

Configurar un entorno para etiquetar automática y aleatoriamente ecuaciones con símbolos

Entonces, usando el entorno de ecuaciones y \label{ ... }, es fácil obtener ecuaciones que se numeran automáticamente en un documento. Si queremos personalizar el símbolo que etiqueta el documento podemos utilizar \tag{ ... }.

Sin embargo, ¿existe una buena manera de configurar el entorno para que, dentro de un documento específico, las ecuaciones se etiqueten automáticamente con símbolos aleatorios? Aquí, el conjunto de símbolos potenciales se especificaría de antemano en algún lugar del documento, y a diferentes ecuaciones se les asignarían diferentes símbolos.

Respuesta1

ElpgfEl paquete proporciona los comandos \pgfmathdeclarerandomlisty \pgfmathrandomitempara trabajar con listas aleatorias. Como probablemente desee utilizar las etiquetas de las ecuaciones como máximo una vez, la mejor opción es eliminar los elementos de la lista cada vez que se utilicen, lo cual es difícil. Afortunadamente, Mark Wibrow ofrece una forma de hacerlo en su respuesta a la pregunta.¿Cómo genero en LaTeX una lista de preguntas aleatorias evitando repeticiones?.

Armado con el código de Mark, es bastante fácil hacer lo que quieras usando \tagpara agregar una etiqueta aleatoria de una lista de etiquetas especificada por el usuario:

ingrese la descripción de la imagen aquí

Aquí está el código:

\documentclass{article}
\usepackage{pgf}
\usepackage{amsmath}

\newcommand\EquationLabels[1]{%
  \pgfmathsetseed{\number\day\number\time}% set a "random" seed based on time
  \pgfmathdeclarerandomlist{equationlabels}{#1}%
}

\newenvironment{Equation}{\equation}%
   {\pgfmathrandomitemwithoutreplacement{\rtag}{equationlabels}\tag{\rtag}\endequation}

% Mark Wibrow: https://tex.stackexchange.com/questions/113987/how-do-i-generate-in-latex-a-list-of-random-questions-avoiding-repetitions
\makeatletter
\def\pgfmathrandomitemwithoutreplacement#1#2{%
    \pgfmath@ifundefined{pgfmath@randomlist@#2}{\pgfmath@error{Unknown random list `#2'}}{%
        \edef\pgfmath@randomlistlength{\csname pgfmath@randomlist@#2\endcsname}%
        \ifnum\pgfmath@randomlistlength>0\relax%
            \pgfmathrandominteger{\pgfmath@randomtemp}{1}{\pgfmath@randomlistlength}%
            \def\pgfmath@marshal{\def#1}%
            \expandafter\expandafter\expandafter\pgfmath@marshal\expandafter\expandafter\expandafter{\csname pgfmath@randomlist@#2@\pgfmath@randomtemp\endcsname}%
            % Now prune.
            \c@pgfmath@counta=\pgfmath@randomtemp\relax%
            \c@pgfmath@countb=\c@pgfmath@counta%
            \advance\c@pgfmath@countb by1\relax%
            \pgfmathloop%
            \ifnum\c@pgfmath@counta=\pgfmath@randomlistlength\relax%
            \else%
                \def\pgfmath@marshal{\expandafter\global\expandafter\let\csname pgfmath@randomlist@#2@\the\c@pgfmath@counta\endcsname=}%
                \expandafter\pgfmath@marshal\csname pgfmath@randomlist@#2@\the\c@pgfmath@countb\endcsname%
                \advance\c@pgfmath@counta by1\relax%
                \advance\c@pgfmath@countb by1\relax%
            \repeatpgfmathloop%
            \advance\c@pgfmath@counta by-1\relax%
            \expandafter\xdef\csname pgfmath@randomlist@#2\endcsname{\the\c@pgfmath@counta}%
        \else%
            \pgfmath@error{Random list `#2' is empty}%
        \fi%
    }}
\makeatletter

\begin{document}

  % set some labels
  \EquationLabels{{$\spadesuit$}{$\heartsuit$}{$\diamondsuit$}{$\clubsuit$}}

  \begin{Equation}1+1=2\end{Equation}

  \begin{Equation}1+2=3\end{Equation}

  \begin{Equation}1+3=4\end{Equation}

  \begin{Equation}1+4=5\end{Equation}

  % a longer list of labels
  \EquationLabels{abcdefghijklmnopqrstuvwxyz}

  \begin{Equation}1+1=2\end{Equation}

  \begin{Equation}1+2=3\end{Equation}

  \begin{Equation}1+3=4\end{Equation}

  \begin{Equation}1+4=5\end{Equation}

\end{document}

Algunas observaciones:

  • La parte difícil la hace el código de Wibrow para\pgfmathrandomitemwithoutreplacement
  • las ecuaciones están escritas dentro de un entorno de ecuaciones normal
  • las etiquetas para las ecuaciones se establecen usando\EquationLabels
  • Si hay más ecuaciones que etiquetas, obtendrá un error no informativo de PGF Math Error que indica que la lista aleatoria equationlabelsestá vacía.

Respuesta2

Puede configurar la secuencia de numeración de símbolos predeterminada utilizando \ifcasecomo redefinición de \theequation:

ingrese la descripción de la imagen aquí

\documentclass{article}

\renewcommand{\theequation}{%
  \ifcase\value{equation}%
    \or $\spadesuit$% 1
    \or $\heartsuit$% 2
    \or $\clubsuit$% 3
    \or $\diamondsuit$% 4
    \or $\star$% 5
    \or $\alpha$% 6
    \or $\beta$% 7
    \or $\gamma$% 8
    \or $\epsilon$% 9
    \else \arabic{equation}% 10...
  \fi
}

\begin{document}

\begin{equation}  1 +   2 =   3 \end{equation}
\begin{equation}  2 +   3 =   5 \end{equation}
\begin{equation}  3 +   5 =   8 \end{equation}
\begin{equation}  5 +   8 =  13 \end{equation}
\begin{equation}  8 +  13 =  21 \end{equation}
\begin{equation} 13 +  21 =  34 \end{equation}
\begin{equation} 21 +  34 =  55 \end{equation}
\begin{equation} 34 +  55 =  89 \end{equation}
\begin{equation} 55 +  89 = 144 \end{equation}
\begin{equation} 89 + 144 = 233 \end{equation}

\end{document}

información relacionada