0
$\begingroup$

Hello I have a For loop which outputs an expression and I want to convert everything to $\LaTeX$ at once (not line by line). This is my code:

K[Q_, n_Integer] := 
 Module[{z, x}, 
  SymmetricReduction[
     SeriesCoefficient[
      Product[ComposeSeries[Series[Q[z], {z, 0, n}], 
        Series[x[i] z, {z, 0, n}]], {i, 1, n}], n], 
     Table[x[i], {i, 1, n}], Table[Subscript[c, i], {i, 1, n}]][[1]] //
    FactorTerms]

  poly = K[Sqrt[#]/Tanh[Sqrt[#]] &, 4] /. c -> p;
  primeFactorForm[n_] := 
  If[Length@# == 1, First@#, CenterDot @@ #] &[
  Superscript @@@ FactorInteger[n]];

  For[i = 0, i < 5, i++, 
  poly = K[Sqrt[#]/Tanh[Sqrt[#]] &, i] /. c -> p;  
  Print[Subscript[L, i], " = ", 
  Plus @@ List @@ Distribute[poly] /. 
  Times[Rational[n_, d_], e__] :> 
  primeFactorForm[n]/ primeFactorForm[d]*e]] 

I am not sure how to convert all the 10 lines to $\LaTeX$. I tried some basic functions (TeXForm for example) but I get \text{Null}. Can someone help me with this? Thank you!

$\endgroup$
3
  • $\begingroup$ For a start, use Table instead of For and Print... $\endgroup$ Mar 4, 2018 at 18:53
  • $\begingroup$ @HenrikSchumacher getting the same result with Table $\endgroup$
    – Silviu
    Mar 4, 2018 at 19:00
  • $\begingroup$ You get \text{Null} from TexForm because you are still using For along with Print instead of Table. Print and For are not meant for returning results; Table is. $\endgroup$ Mar 7, 2018 at 17:05

1 Answer 1

1
$\begingroup$

In order to produce a string, that can be copied, e.g., to a $\LaTeX$ document, you may use the following. It is important to prevent Set (also known as =) from evaluation; turning it into a string "=" by hand is subobtimal since TeXForm will wrap it with \text{=}. That is why I use Inactive on the InputForm of =.

string = StringJoin["\\begin{gather}",
  Riffle[
   Table[
    poly = K[Sqrt[#]/Tanh[Sqrt[#]] &, i] /. c -> p;

    ToString[

     Inactive[Set][Subscript[L, i], 
      Plus @@ List @@ Distribute[poly] /. 
       Times[Rational[n_, d_], e__] :> primeFactorForm[n]/primeFactorForm[d]*e
      ],
     TeXForm
     ]
    ,
    {i, 0, 4}] ,
   "\\\\"
   ],
  "\n\\end{gather}"
  ]

$$\begin{gather}L_0=1\\L_1=p_1+\frac{1}{3}\\L_2=\frac{p_1^2 -1^1}{3^2\cdot 5^1}+\frac{p_2 7^1}{3^2\cdot 5^1}\\L_3=\frac{p_1^3 2^1}{3^3\cdot 5^1\cdot 7^1}+\frac{p_2 p_1 -1^1\cdot 13^1}{3^3\cdot 5^1\cdot 7^1}+\frac{p_3 2^1\cdot 31^1}{3^3\cdot 5^1\cdot 7^1}\\L_4=\frac{p_1^4 -1^1}{3^3\cdot 5^2\cdot 7^1}+\frac{p_2 p_1^2 2^1\cdot 11^1}{3^4\cdot 5^2\cdot 7^1}+\frac{p_3 p_1 -1^1\cdot 71^1}{3^4\cdot 5^2\cdot 7^1}+\frac{p_2^2 -1^1\cdot 19^1}{3^4\cdot 5^2\cdot 7^1}+\frac{p_4 127^1}{3^3\cdot 5^2\cdot 7^1} \end{gather}$$

Note that special characters such as "\", """, and newline have to be replaced by appropriate escape sequences "\\", "\"", and \n. Copying this with ctrl+c will most likely lead to errors. However, executing CopyToClipboard[string] (and then pasting ctrl+v into any other editor) will work.

$\endgroup$
6
  • $\begingroup$ @Thank you for this. However when I try to copy it in a file text it doesn't work the way I want... $\endgroup$
    – Silviu
    Mar 6, 2018 at 11:02
  • $\begingroup$ Silviu -- you need to specify how you want it to work. What part fails? $\endgroup$
    – bill s
    Mar 7, 2018 at 3:47
  • $\begingroup$ @Silviu I have edited the post. Have a look. $\endgroup$ Mar 7, 2018 at 6:56
  • $\begingroup$ @HenrikSchumacher Thank you for this, but it still doesn't work. I also edited my post adding the whole code that I want to convert into latex. $\endgroup$
    – Silviu
    Mar 7, 2018 at 16:57
  • $\begingroup$ Thank you so so much for this! $\endgroup$
    – Silviu
    Mar 7, 2018 at 18:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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