2012-01-01 30 views
5

Tôi đang viết các macro với m4 để dễ dàng nhúng toán vào mã HTML. Slashes cần phải được thoát và tôi muốn tự động hóa quá trình này nhưng tôi vẫn chưa tìm ra một cách tốt.Tự động thoát các dấu gạch chéo trong m4 cho các lệnh shell

Chạy m4 về sau cho thấy vấn đề:

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

đầu ra của tôi trong những điều sau đây:

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

Nếu tôi thay \frac với \\\frac sau đó tôi nhận được kết quả mong muốn. Tôi có thể làm điều đó mọi lúc, nhưng tôi muốn tự động hóa quá trình này nếu tôi có thể. Kết quả mong muốn, nhân tiện, là

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

được gửi đến lệnh khác để tạo mã HTML hoặc hình ảnh (ngoài ví dụ tối thiểu này).

Tôi biết một cách không thỏa đáng để giải quyết vấn đề này. Tôi có thể sử dụng một ký tự khác (hoặc kết hợp các ký tự) cho số \ của TeX và xác định một macro khác để tự động thay thế nó. Điều này là không đạt yêu cầu vì tôi muốn sử dụng mã LaTeX thẳng mà không sửa đổi và nó không đơn giản hơn đáng kể so với sử dụng ba dấu gạch chéo.

Làm cách nào để thay đổi macro của mình để tự động thoát khỏi dấu gạch chéo một cách chính xác để tôi có thể sử dụng mã LaTeX thẳng?

Trả lời

4

Nó đã cho tôi đủ lâu để con số này ra, nhưng hoạt động này:

define(`_imath', `esyscmd(echo "$ patsubst(`$1',`\\',`\\\\\\') $")')dnl 
_imath(y = \frac{1}{2} x^{2.3} + 2) 
Các vấn đề liên quan