#!/bin/python import subprocess import re # Dictionary for symbol conversion to LaTeX format latex_symbols = { "Ω": r"\Omega", "ohm": r"\Omega", "A": r"\text{A}", "V": r"\text{V}", "*": r"\cdot", "N*m": r"\text{N} \cdot \text{m}", "in*lb": r"\text{in} \cdot \text{lb}", "||": r"\|", } def run_qalc(expression): # Run qalc with the provided expression result = subprocess.run(["qalc", expression], stdout=subprocess.PIPE, text=True) output = result.stdout return output def format_expression_for_latex(expression): # Replace the units and special characters in the input expression using the dictionary for symbol, latex_symbol in latex_symbols.items(): expression = expression.replace(symbol, latex_symbol) return expression def format_result_for_latex(output): # Get the last line of qalc output (the answer) output = output.strip().split("\n")[-1] # Check if the result is approximate (contains "≈") approx_match = "≈" in output # Extract the value and unit from the result match = re.search(r"(≈|=)\s*([-\d\.]+)\s*(.*)", output) if match: _, value, unit = match.groups() # Replace the units and special characters using the dictionary unit = unit.strip() for symbol, latex_symbol in latex_symbols.items(): unit = unit.replace(symbol, latex_symbol) # Use = or \approx in LaTeX based on whether the result is approximate equal_symbol = r"\approx" if approx_match else "=" # Only add \, if there's a unit if unit: latex_result = f"{equal_symbol} {value.strip()} \\, {unit}" else: latex_result = f"{equal_symbol} {value.strip()}" return latex_result return output # Fallback to returning the raw qalc output if no match def copy_to_clipboard(text): # Use wl-copy to send the text to the clipboard subprocess.run(["wl-copy"], input=text, text=True) def main(): # Input the qalc expression expression = input("Enter qalc expression: ") # Run qalc and get the result qalc_output = run_qalc(expression) # Format the input expression for LaTeX latex_expression = format_expression_for_latex(expression) # Format the output result for LaTeX latex_result = format_result_for_latex(qalc_output) # Combine both input expression and result for final LaTeX output final_latex_output = f"${latex_expression} {latex_result}$" # Print and copy to clipboard print(f"Final LaTeX output:\n{final_latex_output}") copy_to_clipboard(final_latex_output) print("LaTeX result copied to clipboard!") if __name__ == "__main__": main()