9
$\begingroup$

The following snippet

args = HoldForm[# Degree] & /@ Array[15 # &, 24, 0];
funcs = {Sin, Cos, Tan, Csc, Sec, Cot};
ques = RandomSample[#, 30] &@(#1@#2 & @@@ Tuples[{funcs, args}]);
# == ReleaseHold[#] & /@ ques // Column // TeXForm

will produce the following output.

\begin{array}{l}
 \tan (240 {}^{\circ})=\sqrt{3} \\
 \tan (180 {}^{\circ})=0 \\
 \sec (15 {}^{\circ})=\sqrt{2} \left(\sqrt{3}-1\right) \\
 \sin (240 {}^{\circ})=-\frac{\sqrt{3}}{2} \\
 \cot (15 {}^{\circ})=2+\sqrt{3} \\
 \tan (60 {}^{\circ})=\sqrt{3} \\
 \tan (75 {}^{\circ})=2+\sqrt{3} \\
 \sec (240 {}^{\circ})=-2 \\
 \cos (255 {}^{\circ})=-\frac{\sqrt{3}-1}{2 \sqrt{2}} \\
 \sec (285 {}^{\circ})=\sqrt{2} \left(1+\sqrt{3}\right) \\
 \sec (135 {}^{\circ})=-\sqrt{2} \\
 \csc (330 {}^{\circ})=-2 \\
 \tan (225 {}^{\circ})=1 \\
 \cos (315 {}^{\circ})=\frac{1}{\sqrt{2}} \\
 \tan (45 {}^{\circ})=1 \\
 \cos (30 {}^{\circ})=\frac{\sqrt{3}}{2} \\
 \sec (270 {}^{\circ})=\text{ComplexInfinity} \\
 \csc (225 {}^{\circ})=-\sqrt{2} \\
 \sec (300 {}^{\circ})=2 \\
 \cos (15 {}^{\circ})=\frac{1+\sqrt{3}}{2 \sqrt{2}} \\
 \cos (270 {}^{\circ})=0 \\
 \sin (165 {}^{\circ})=\frac{\sqrt{3}-1}{2 \sqrt{2}} \\
 \sin (255 {}^{\circ})=-\frac{1+\sqrt{3}}{2 \sqrt{2}} \\
 \csc (30 {}^{\circ})=2 \\
 \cot (105 {}^{\circ})=\sqrt{3}-2 \\
 \tan (270 {}^{\circ})=\text{ComplexInfinity} \\
 \sec (60 {}^{\circ})=2 \\
 \cos (300 {}^{\circ})=\frac{1}{2} \\
 \cot (285 {}^{\circ})=\sqrt{3}-2 \\
 \csc (135 {}^{\circ})=\sqrt{2} \\
\end{array}

When I render it with pdflatex I get the following output.

enter image description here

Question

I want to

  • remove the round brackets ()
  • replace {}^{\circ} with just ^\circ
  • replace ComplexInfinity with \infty

How to achieve these requirements?

$\endgroup$
8
$\begingroup$

Let us to some degree do the LaTeX conversion ourselves. To create \infty for complex infinity, you can implement your own function:

texForm[ComplexInfinity] := "\\infty";
texForm[arg_] := ToString[arg, TeXForm];

Re-using the expression form you have, we can write a small function that matches each part and create a TeX string manually, only using TeXForm for the numbers on the right side:

mkTex[arg : (f_[HoldForm[Times[n_, Degree]]])] := 
  StringTemplate["`f` `n`^\\circ = `eval`"]@Association[
    "f" -> "\\" <> ToLowerCase@SymbolName[f],
    "n" -> n,
    "eval" -> texForm[ReleaseHold[arg]]
  ];
mkTex[l_List] := "\\begin{array}{l}\n" <> StringRiffle[mkTex /@ l, " \\\\\n"] <> 
  "\n\\end{array}"

This gives the final string that you can directly export as TeX

args = HoldForm[# Degree] & /@ Array[15 # &, 24, 0];
funcs = {Sin, Cos, Tan, Csc, Sec, Cot};
ques = RandomSample[#, 30] &@(#1@#2 & @@@ Tuples[{funcs, args}]);
mkTex[ques]

Formatted as you wanted

\begin{array}{l}
\sec 30^\circ = \frac{2}{\sqrt{3}} \\
\cos 165^\circ = -\frac{1+\sqrt{3}}{2 \sqrt{2}} \\
\tan 330^\circ = -\frac{1}{\sqrt{3}} \\
\sin 150^\circ = \frac{1}{2} \\
\csc 165^\circ = \sqrt{2} \left(1+\sqrt{3}\right) \\
\cos 0^\circ = 1 \\
\tan 150^\circ = -\frac{1}{\sqrt{3}} \\
\tan 345^\circ = \sqrt{3}-2 \\
\cos 270^\circ = 0 \\
\cot 135^\circ = -1 \\
\tan 165^\circ = \sqrt{3}-2 \\
\sin 270^\circ = -1 \\
\cos 75^\circ = \frac{\sqrt{3}-1}{2 \sqrt{2}} \\
\cos 300^\circ = \frac{1}{2} \\
\sin 240^\circ = -\frac{\sqrt{3}}{2} \\
\csc 15^\circ = \sqrt{2} \left(1+\sqrt{3}\right) \\
\tan 300^\circ = -\sqrt{3} \\
\sin 195^\circ = -\frac{\sqrt{3}-1}{2 \sqrt{2}} \\
\tan 285^\circ = -2-\sqrt{3} \\
\sin 135^\circ = \frac{1}{\sqrt{2}} \\
\sec 300^\circ = 2 \\
\sin 15^\circ = \frac{\sqrt{3}-1}{2 \sqrt{2}} \\
\tan 270^\circ = \infty \\
\sin 75^\circ = \frac{1+\sqrt{3}}{2 \sqrt{2}} \\
\sin 90^\circ = 1 \\
\sin 0^\circ = 0 \\
\cos 15^\circ = \frac{1+\sqrt{3}}{2 \sqrt{2}} \\
\sec 195^\circ = -\sqrt{2} \left(\sqrt{3}-1\right) \\
\cot 165^\circ = -2-\sqrt{3} \\
\sin 255^\circ = -\frac{1+\sqrt{3}}{2 \sqrt{2}}
\end{array}

\begin{array}{l} \sec 30^\circ = \frac{2}{\sqrt{3}} \\ \cos 165^\circ = -\frac{1+\sqrt{3}}{2 \sqrt{2}} \\ \tan 330^\circ = -\frac{1}{\sqrt{3}} \\ \sin 150^\circ = \frac{1}{2} \\ \csc 165^\circ = \sqrt{2} \left(1+\sqrt{3}\right) \\ \cos 0^\circ = 1 \\ \tan 150^\circ = -\frac{1}{\sqrt{3}} \\ \tan 345^\circ = \sqrt{3}-2 \\ \cos 270^\circ = 0 \\ \cot 135^\circ = -1 \\ \tan 165^\circ = \sqrt{3}-2 \\ \sin 270^\circ = -1 \\ \cos 75^\circ = \frac{\sqrt{3}-1}{2 \sqrt{2}} \\ \cos 300^\circ = \frac{1}{2} \\ \sin 240^\circ = -\frac{\sqrt{3}}{2} \\ \csc 15^\circ = \sqrt{2} \left(1+\sqrt{3}\right) \\ \tan 300^\circ = -\sqrt{3} \\ \sin 195^\circ = -\frac{\sqrt{3}-1}{2 \sqrt{2}} \\ \tan 285^\circ = -2-\sqrt{3} \\ \sin 135^\circ = \frac{1}{\sqrt{2}} \\ \sec 300^\circ = 2 \\ \sin 15^\circ = \frac{\sqrt{3}-1}{2 \sqrt{2}} \\ \tan 270^\circ = \infty \\ \sin 75^\circ = \frac{1+\sqrt{3}}{2 \sqrt{2}} \\ \sin 90^\circ = 1 \\ \sin 0^\circ = 0 \\ \cos 15^\circ = \frac{1+\sqrt{3}}{2 \sqrt{2}} \\ \sec 195^\circ = -\sqrt{2} \left(\sqrt{3}-1\right) \\ \cot 165^\circ = -2-\sqrt{3} \\ \sin 255^\circ = -\frac{1+\sqrt{3}}{2 \sqrt{2}} \end{array}

$\endgroup$
  • $\begingroup$ I modified your code a little bit: mkTex[l_List] := StringRiffle[ mkTex /@ l, {"\\begin{enumerate}\n\t\\item $\\displaystyle ", "$\n\t\\item $\\displaystyle ", "$\n\\end{enumerate}"}]; $\endgroup$ – Friendly Ghost Aug 22 '18 at 15:37
3
$\begingroup$

You could use my TeXUtilities` package.

Define special TeXForm Format for relevant functions:

funcs = {Sin, Cos, Tan, Csc, Sec, Cot};

Import@"https://raw.githubusercontent.com/jkuczm/MathematicaTeXUtilities/master/NoInstall.m"

Unprotect@Evaluate@Append[funcs, DirectedInfinity];
With[{f = "\\" <> ToLowerCase@SymbolName@# <> " "},
  Format[#@HoldForm[x_ Degree], TeXForm] :=
    TeXVerbatim[f <> ToString[Unevaluated@x, TeXForm] <> "^\\circ"]
] & /@ funcs;
Format[ComplexInfinity, TeXForm] := ∞
Protect@Evaluate@Append[funcs, DirectedInfinity];

Now use TeXForm as usual:

args = HoldForm[# Degree] & /@ Array[15 # &, 24, 0];
SeedRandom@0
ques = RandomSample[#, 30] &@(#1@#2 & @@@ Tuples[{funcs, args}]);
# == ReleaseHold[#] & /@ ques // Column // TeXForm
\begin{array}{l}
 \sin 120^\circ=\frac{\sqrt{3}}{2} \\
 \cos 135^\circ=-\frac{1}{\sqrt{2}} \\
 \csc 240^\circ=-\frac{2}{\sqrt{3}} \\
 \cot 30^\circ=\sqrt{3} \\
 \cot 330^\circ=-\sqrt{3} \\
 \sin 210^\circ=-\frac{1}{2} \\
 \sec 15^\circ=\sqrt{2} \left(\sqrt{3}-1\right) \\
 \csc 345^\circ=-\sqrt{2} \left(1+\sqrt{3}\right) \\
 \cot 180^\circ=\infty  \\
 \csc 255^\circ=-\sqrt{2} \left(\sqrt{3}-1\right) \\
 \sin 225^\circ=-\frac{1}{\sqrt{2}} \\
 \sin 135^\circ=\frac{1}{\sqrt{2}} \\
 \tan 75^\circ=2+\sqrt{3} \\
 \sec 105^\circ=-\sqrt{2} \left(1+\sqrt{3}\right) \\
 \sec 135^\circ=-\sqrt{2} \\
 \cot 135^\circ=-1 \\
 \cos 120^\circ=-\frac{1}{2} \\
 \sec 285^\circ=\sqrt{2} \left(1+\sqrt{3}\right) \\
 \sin 270^\circ=-1 \\
 \cot 60^\circ=\frac{1}{\sqrt{3}} \\
 \cot 15^\circ=2+\sqrt{3} \\
 \sec 210^\circ=-\frac{2}{\sqrt{3}} \\
 \sin 195^\circ=-\frac{\sqrt{3}-1}{2 \sqrt{2}} \\
 \csc 195^\circ=-\sqrt{2} \left(1+\sqrt{3}\right) \\
 \cos 15^\circ=\frac{1+\sqrt{3}}{2 \sqrt{2}} \\
 \csc 315^\circ=-\sqrt{2} \\
 \sin 45^\circ=\frac{1}{\sqrt{2}} \\
 \sec 120^\circ=-2 \\
 \cos 300^\circ=\frac{1}{2} \\
 \csc 225^\circ=-\sqrt{2} \\
\end{array}

You can also define suitable formatting wrapper different than Column:

Format[enumerate@l_List, TeXForm] := TeXEnvironment[
  {"enumerate", "BodyConverter" -> Function[
    Null,
    "\\item $\\displaystyle " <> ToString[Unevaluated@#, TeXForm] <> "$",
    HoldAllComplete
  ]},
  Sequence @@ Unevaluated /@ l
]

# == ReleaseHold[#]& /@ ques // enumerate // TeXForm
\begin{enumerate}
    \item $\displaystyle \sin 120^\circ=\frac{\sqrt{3}}{2}$
    \item $\displaystyle \cos 135^\circ=-\frac{1}{\sqrt{2}}$
    \item $\displaystyle \csc 240^\circ=-\frac{2}{\sqrt{3}}$
    \item $\displaystyle \cot 30^\circ=\sqrt{3}$
    \item $\displaystyle \cot 330^\circ=-\sqrt{3}$
    \item $\displaystyle \sin 210^\circ=-\frac{1}{2}$
    \item $\displaystyle \sec 15^\circ=\sqrt{2} \left(\sqrt{3}-1\right)$
    \item $\displaystyle \csc 345^\circ=-\sqrt{2} \left(1+\sqrt{3}\right)$
    \item $\displaystyle \cot 180^\circ=\infty$
    \item $\displaystyle \csc 255^\circ=-\sqrt{2} \left(\sqrt{3}-1\right)$
    \item $\displaystyle \sin 225^\circ=-\frac{1}{\sqrt{2}}$
    \item $\displaystyle \sin 135^\circ=\frac{1}{\sqrt{2}}$
    \item $\displaystyle \tan 75^\circ=2+\sqrt{3}$
    \item $\displaystyle \sec 105^\circ=-\sqrt{2} \left(1+\sqrt{3}\right)$
    \item $\displaystyle \sec 135^\circ=-\sqrt{2}$
    \item $\displaystyle \cot 135^\circ=-1$
    \item $\displaystyle \cos 120^\circ=-\frac{1}{2}$
    \item $\displaystyle \sec 285^\circ=\sqrt{2} \left(1+\sqrt{3}\right)$
    \item $\displaystyle \sin 270^\circ=-1$
    \item $\displaystyle \cot 60^\circ=\frac{1}{\sqrt{3}}$
    \item $\displaystyle \cot 15^\circ=2+\sqrt{3}$
    \item $\displaystyle \sec 210^\circ=-\frac{2}{\sqrt{3}}$
    \item $\displaystyle \sin 195^\circ=-\frac{\sqrt{3}-1}{2 \sqrt{2}}$
    \item $\displaystyle \csc 195^\circ=-\sqrt{2} \left(1+\sqrt{3}\right)$
    \item $\displaystyle \cos 15^\circ=\frac{1+\sqrt{3}}{2 \sqrt{2}}$
    \item $\displaystyle \csc 315^\circ=-\sqrt{2}$
    \item $\displaystyle \sin 45^\circ=\frac{1}{\sqrt{2}}$
    \item $\displaystyle \sec 120^\circ=-2$
    \item $\displaystyle \cos 300^\circ=\frac{1}{2}$
    \item $\displaystyle \csc 225^\circ=-\sqrt{2}$
\end{enumerate}
$\endgroup$
  • $\begingroup$ +1 But I prefer not to depend on any third party packages because dependency can potentially lead to problem in the future. $\endgroup$ – Friendly Ghost Aug 23 '18 at 0:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.