LaTeX中如何實現在自定義命令中對自定義的變數進行簡單的運算?

為了說清楚,我把問題簡化一下。假如我自定義了類似如下的命令,用來畫同心圓環,同心圓環的寬度固定為1mm,於是我定義如下命令:


ewcommand{
ing}[1]{
draw(0,0) circle(#1 mm)
draw(0,0) circle(?? mm)
}

??處是想實現#1-1的運算效果,也就是說在命令的定義中實現對變數的簡單運算。

想求教大佬們該如何實現這樣的功能。

本人初入LaTeX,問題可能有點幼稚~


寫稍微複雜的宏,計算就隨處可見。做計算的方法實在太多,在需要的場合你會知道的。

比方說畫圖,你猜想出來的語法恰好和繪圖包 tikz 幾乎一模一樣,直接寫算式就能計算:

documentclass{article}
usepackage{tikz}

ewcommand
ing[1]{%
ikz draw (0,0) circle (#1mm)
(0,0) circle (#1mm-1mm);}
egin{document}

ing{2}
ing{3}
ing{4}
ing{5}
end{document}

但是換個地方這麼用,大概率就不行了,因為這裡計算的語法是由繪圖包 tikz 提供的。

TeX 本身就能計算,有多種數據類型的寄存器,以及加減乘除的運算指令。不同 TeX 實現還有一些擴展指令來做各種運算。LaTeX2e 有基礎的 calc 宏包可以在特定場合做長度和整數計算。各種繪圖包有自己的計算語法。等等。TeX 和 LaTeX 中常見的幾種計算工具,可以看 stackexchange 的這個問題:How can I sum two values and store the result in other variable?


以前,我會試著用各種包來做。但是現在,最快的辦法是用Python/Ruby來生成文檔。

用TeX做parser是很累的工作。當然,用TeX做的parser速度上肯定是不夠的。


推薦閱讀:

LaTeX 用什麼教材學習?如何高效學習?
用 LaTeX 寫作是一種什麼樣的體驗?
LaTeX和CTeX,TeX Live的作用分別是什麼?有什麼關係?
morewrites 宏包的主要原理是什麼?

TAG:LaTeX | LaTeX排版與設計 |