TeX in ein Klartextformat konvertieren?

Sep 30 2020

Ich versuche ein Tool zu finden, um TeX in Folgendes umzuwandeln:

{\frac{-x}{y}}

zu

((-x)/(y))

oder

{\frac{1}{x\ln(b)}}

zu

((1)/(xln(b)))

Ich habe einen sehr einfachen Konverter dafür gebaut, aber es gibt Probleme mit einigen Randfällen, und ich habe mich gefragt, ob es Werkzeuge gibt, die dies bereits tun.

Antworten

3 Mico Sep 30 2020 at 16:25

Wenn Sie LuaLaTeX verwenden können, ist die folgende Lösung möglicherweise für Sie von Interesse. Es wird ein aufgerufenes LaTeX-Makro eingerichtet, \TexToTextdas eine Lua-Funktion aufruft, die aufgerufen wird tex2text, um den größten Teil der Arbeit zu erledigen. Vier separate Schritte werden ausgeführt von tex2text:

  • \fracNotation in Inline-Mathe-Notation konvertieren
  • Anweisungen zur Größenbestimmung für mathematische "Zaun" -Symbole ablegen
  • Entfernen Sie das \(Backslash-) Zeichen vor anderen TeX-Makronamen (z. B. \expund \ln).
  • Umschließen Sie den endgültigen Ausdruck in zwei Klammern.

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode} % for 'luacode' env. and '\luastringN' macro
\begin{luacode}
-- Aux. function to trim first and last char. of a string:
function trim ( s )
  return s:sub(2,-2) 
end
-- Aux. function to get rid of \frac wrapper
function frac2text ( s )
  s =  s:gsub ( "\\frac%s-(%b{})%s-(%b{})", 
                function (u,v)
                   return "("..trim(u)..")/("..trim(v)..")" 
                end ) 
  return s
end
-- The main Lua function:
function tex2text ( s )
   -- Call frac2text function:
   s = frac2text ( s )
   -- Drop fence-sizing macros:
   s = s:gsub ( "\\left" , "" )
   s = s:gsub ( "\\right" , "" )
   s = s:gsub ( "\\[Bb]igg?[lmr]?" , "" )
   -- Remove leading backslash char from all other macros:
   s = s:gsub ( "\\(%a+)" , "%1\\ignorespacesafterend" )
   -- Encase the result in a pair of parentheses:
   return "(" .. s .. ")"
end
\end{luacode}
\newcommand\TexToText[1]{\directlua{tex.sprint(tex2text(\luastringN{#1}))}}

\begin{document}
\TexToText{\ln(\exp(0))} \quad
\TexToText{\frac{-x}{y}} \quad
\TexToText{\frac{1}{x\ln(b)}}
\end{document}