I'll reiterate my recommendation of MyOpenMath. To your points:
- It understands TeX (a simplified version, using ` math ` instead of \$ math \$)
- It sllows the use of parameters in some way to randomize numbers for each student
- It allows these parameters within the TeX code.
- It can be integrated into Blackboard (that's how I've been using it) using an LTI link. (video)
Here are some problems I wrote, each with two randomized versions I got by clicking "New Version":
Problem #1. [Same problem coding, initiated by random "seed" numbers. This problem took 6 lines of code to write, and you can get pretty specific with how you want students to enter their answers. I left it totally open to accept decimals, fractions or expressions, provided they are equivalent to the correct answer.]
Problem #2. [Again, same problem coding, initiated by random "seed" numbers. Note that you can randomize function names and randomly order the presentation of the problem.]
Problem #3. [Same problem coding, initiated by random "seed" numbers. For the answers involving expressions, you can enter any algebraic expression equivalent to the correct answer (e.g. x(3x-1/x) or 3x^2-1+sin(0). It has built-in graphing capabilities that can accept random elements. Again, you can specify how the answer must look, such as being factored, etc. This particular problem was "scaffolded" so a student must get the first part correct before moving on to the next part. Each part can have hints, etc.]
The math is almost TeX, just with slightly simplified commands (MOM was coded in php). For example, one can type `frac(3)(4)` or just `3/4` to get $\frac{3}{4}$. Or for integrals, you can type `int_5^(3x) g(t)dt` to get $\int_5^{3x} g(t)dt$. [Notice the use of ( ) instead of { }, as well as the lack of \ characters.]
Anyway -- I hope this helps. This program has really saved me these past few terms.
[Edit] In case you wanted to see the code for that first problem:
\$anstypes="calculated,numfunc"
\$answerformat[1]="equation"
\$a,\$b,\$c,\$d=nonzerodiffrands(-6,6,4)
\$func=makexxpretty("\$a x + \$b")
\$answer[0]=\$a*\$c + \$b
\$answer[1]="x=(\$d-\$b)/\$a"
Then the problem text looks like:
Suppose `f(x)=\$func`.
Evaluate `f(\$c)`.
Answer: \$answerbox[0]
Solve the equation `f(x) = \$d`. [Remember to give your answer in the form "x = ..."]
Answer: \$answerbox[1]