Showing posts with label Tip. Show all posts
Showing posts with label Tip. Show all posts

Thursday, January 20, 2011

小技巧: 在Mac中添加字体, 并让XeTeX能够找到

当使用LaTeX排版时, 我习惯于使用Adobe的中文字体, 生成出来的PDF效果很好. 但由于某种众所周知的原因, 各种操作系统都没有自带, 因此我需要手动添加.

以前在使用Ubuntu时, 只需要将字体文件放到"/etc/fonts/fonts.conf"配置文件中指定的字体目录, 再执行"fc-cache -f"即可. 而Mac OS X提供了更简便的方法进行字体的安装, 只需要打开"Font Book", 在"File"菜单中点击"Add Fonts..."即可. 不过有一点必须注意, 字体必须安装到"Computer"这个"Collection"中, 否则在使用xelatex编译时会找不到字体. 建议修改"Font Book"设置中的"Default Install Location"为"Computer", 如下图.

Monday, April 26, 2010

小技巧: 在C++中实现在main函数之前及之后执行代码

对于C++程序而言, 程序执行的入口总是main函数. 怎样才能在执行main函数之前执行一段代码呢? 答案是全局对象 (global object). 程序在执行时因为会先初始化全局变量, 当这个全局变量是一个对象时, 自然会调用相应的构造函数, 这时构造函数中的代码就得以执行.

那怎样在main函数退出之后再执行一段代码? 答案依然是全局对象. 当程序退出时, 全局变量必须销毁, 自然会调用全局对象的析构函数, 剩下的就同构造函数一样了.

下面是一段测试代码:
#include <iostream>

using namespace std;

class A
{
public:
    A()
    {
        cout << "1" << endl;
    }

    ~A()
    {
        cout << "4" << endl;
    }
};

A a;

int main(int argc, char* argv[])
{
    cout << "2" << endl;

    cout << "3" << endl;

    return 0;
}

P.S. 本来想通过汇编进一步分析的, 无奈功力还不够深厚, 希望以后能够搞懂. 若有高人了解, 还望指点.