
Mithilfe der Gleichungsumgebung und \label{ ... }
ist es also einfach, Gleichungen zu erhalten, die in einem Dokument automatisch nummeriert sind. Wenn wir das Symbol anpassen möchten, das das Dokument beschriftet, können wir verwenden \tag{ ... }
.
Gibt es jedoch eine gute Möglichkeit, die Umgebung so einzurichten, dass Gleichungen in einem bestimmten Dokument automatisch mit zufälligen Symbolen beschriftet werden? Hier würde der Satz möglicher Symbole vorher irgendwo im Dokument angegeben und verschiedenen Gleichungen würden unterschiedliche Symbole zugewiesen.
Antwort1
DerpgfPaket stellt die Befehle \pgfmathdeclarerandomlist
und \pgfmathrandomitem
zum Arbeiten mit zufälligen Listen bereit. Da Sie die Gleichungsbeschriftungen vermutlich höchstens einmal verwenden möchten, besteht die beste Option darin, die Listenelemente bei jeder Verwendung zu löschen, was schwierig ist. Glücklicherweise gibt Mark Wibrow in seiner Antwort auf die Frage eine Möglichkeit, dies zu tunWie erstelle ich in LaTeX eine Liste mit zufälligen Fragen und vermeide dabei Wiederholungen?.
Mit Marks Code ist es ganz einfach, das Gewünschte zu tun, indem Sie \tag
ein zufälliges Etikett aus einer benutzerdefinierten Liste von Etiketten hinzufügen:
Hier ist der Code:
\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}
Einige Anmerkungen:
- Den schwierigen Teil erledigt Wibrows Code für
\pgfmathrandomitemwithoutreplacement
- Die Gleichungen werden in einer normalen Gleichungsumgebung gesetzt
- Die Beschriftungen für die Gleichungen werden festgelegt mit
\EquationLabels
- Wenn mehr Gleichungen als Beschriftungen vorhanden sind, erhalten Sie von PGF Math Error einen nicht informativen Fehler, der besagt, dass die Zufallsliste
equationlabels
leer ist.
Antwort2
Sie können die vorgegebene Symbolnummerierungssequenz durch \ifcase
Neudefinition von festlegen \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}