
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 \pgfmathdeclarerandomlist
y \pgfmathrandomitem
para 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 \tag
para agregar una etiqueta aleatoria de una lista de etiquetas especificada por el usuario:
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
equationlabels
está vacía.
Respuesta2
Puede configurar la secuencia de numeración de símbolos predeterminada utilizando \ifcase
como redefinición de \theequation
:
\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}