2012-01-01 14 views
5

Sto scrivendo macro con m4 per incorporare facilmente la matematica nel codice HTML. Le barre devono essere sfuggite e io voglio automatizzare questo processo ma non ho ancora capito bene.Escaping automatico di barre in m4 per comandi shell

esecuzione m4 sul seguente mostra il problema:

define(`_imath', `esyscmd(`echo "$ $1 $"')')dnl 
_imath(y = \frac{1}{2} x^{2.3} + 2) 

La mia uscita nel seguente:

$ y = 
     rac{1}{2} x^{2.3} + 2 $ 

Se sostituisco \frac con \\\frac allora ottengo il risultato desiderato. Potrei farlo ogni volta, ma voglio automatizzare questo processo se posso. Il risultato desiderato, tra l'altro, è

$ y = \frac{1}{2} x^{2.3} + 2 $ 

che è convogliato ad un altro comando che produrranno codice HTML o un'immagine (fuori di questo esempio minimo).

Conosco un modo insoddisfacente per aggirare questo problema. Potrei usare un carattere diverso (o una combinazione di caratteri) per \ di TeX e definire un'altra macro per sostituirlo automaticamente. Questo è insoddisfacente perché voglio usare il codice LaTeX senza modifiche e non è significativamente più semplice dell'uso di tre barre.

Come posso modificare la macro per uscire correttamente dalla barra in modo da poter utilizzare il codice LaTeX corretto?

risposta

4

mi c'è voluto abbastanza a lungo per capire questo, ma questo funziona:

define(`_imath', `esyscmd(echo "$ patsubst(`$1',`\\',`\\\\\\') $")')dnl 
_imath(y = \frac{1}{2} x^{2.3} + 2)