在TeX编程中有都哪些技巧?
我们都知道 TeX 的 \romannumeral 可以将随后的阿拉伯数字转化成小写罗马数字。\romannumeral 有这么几个性质:它会展开随后的记号,直到得到一个完整的数字为止;
如果数字不是正整数,它的展开结果为空;000 是 m,2000 是 mm,10000 是 10 个 m。是 1000 的多少倍,就是多少个 m,这是 \ltx@CarNumth 实现的最主要技巧。现在来看 \ltx@CarNumth 的定义:\ltx@CarNumth 由 \romannumeral 启动,使用了性质 1,实现将它展开两次就能得到结果的效果。随后的 3 个 \expandafter 将 \ltx@GobbleNum 展开了两次,\ltx@GobbleNum 也是由 \romannumeral 启动的:这里的 \LTXcmds@num 是 \number 或者 \the\numexpr,用于把参数 #1 转换成阿拉伯数字(记作 n),跟后面的 000 连起来,由 \romannumeral 转换成 n 个 m。\LTXcmds@GobbleNum 是个尾递归:用于生成 n 个 \csname LTXcmds@Gm。最后是由终止了递归。它展开成\LTXcmds@Gm 是吃掉一个参数,然后返回一个 \endcsname,结束前面的 \csname。吃掉 n 个参数之后(\ltx@CarNumth 是得到第 n 个项目,应该只吃掉 n-1 个参数,所以 \ltx@CarNumth 的定义最后有个空的分组用于占位,避免了计算),得到\ltx@zero 是字符常数 0,终止了 \romannumeral 的展开。最后由 \LTXcmds@CarNumth 完成清理工作:TeX 的最大整数是 2147483647,所以 \ltx@CarNumth 最多可以用到 2147483。但是可能远没有到这么多的时候,TeX 的内存就不够了。在我的老笔记本(T9600)上用 l3benchmark 作性能测试,\ltx@CarNumth 要比 \tl_item:nn 快一个数量级。测试用的脚本是如果机器性能好点的话,差异可能没这么明显。就说这么一个例子,你要有兴趣的话,可以去看看 LaTeX3 的源代码文档 source3.pdf,可以说是各种技巧的集大成者,比如上面测试脚本中用到的 \prg_replicate:nn 的实现就极具技巧性。
Android Studio是一个Android开发环境,基于IntelliJ IDEA. 类似Eclipse ADT,Android Studio 提供了集成的Android开发工具用于开发和调试。在IDEA的基础上,Android Studio提供 :
1. 基于Gradle的构建支持。
2. Android专属的重构和快速修复。
3. 提示工具以捕获性能、可用性、版本兼容性等问题。
4. 支持ProGuard和应用签名。
5. 基于模板的向导来生成常用的Android应用设计和组件。
6. 功能强大的布局编辑器,可以让你拖拉UI控件并进行效果预览。
针对于发行版的选择。现在只推荐TeX Live。在Windows平台下虽然有MikTeX可以选择,但是因为一些依赖的库实现不一致,很容易出现不可在TeX Live复现的bug,所以一般还是使用TeX Live来进行编译。