0%

一、字体介绍

1.1 演变历史

  • 最早的字体是“帝国大写体”(Imperial Capitals),也被称为“罗马大写体”,古罗马时期字体,用于在石碑上记录重大事件。
  • 然后是“卡洛林小写体”(Carolingian Minuscule),这种字体在中世纪早期出现,这种字体字间距大,结构清晰简单,但是已经具有了一定的宗教色彩。
  • 中世纪后期西欧出现了“哥特体”(Gothic),是卡洛林小写体的演化体,这种字体更加复杂和华丽,字间距小,笔画厚重而末端尖锐,具有强烈的宗教色彩。
  • “人文主义体”是“文艺复兴之父”彼特拉克提倡发明的字体,受启发于卡洛林小写体字间距大,方便阅读的特点,是文艺复兴早期的字体,风格比较圆润轻松,字轴比较倾斜。
  • “意大利斜体”受启发于“人文主义体”,这种字体更加自由畅快,同时由于斜体的特点,可以兼顾辨认和节省空间的特点,是当时印刷业的新宠。
  • “印刷罗马体”是活字印刷术发明后在意大利发明的,这种字体受启发于“人文主义体”和“帝国大写体”,这种字体字轴中正,笔画圆润,书写痕迹浅,成为了“人文主义体”的淘汰者。

image-20240211214139291

1.2 具体介绍

Read more »

虽然这幅画还没有画出主角十分之一的神态,但是不得不承认,这已经是我能力的极限了。

  • 结构永远是重中之重,也就是人没有办法画出超过自己意识的画面
  • 光真的好迷人啊
  • 不要怕修改哪怕重构
  • 要保持昂扬的状态坚持住
  • 完成的原因是因为她本来就在那里
  • 奉献出最为非普世化的东西,才是真正的“闲心思”

一、起始概念

1.1 排版

应当明确,排版问题并不会因为 LaTex “内容和格式分离”的设计宗旨而消失,实际上,LaTex 就是在解决“排版问题”,它就是一个排版工具,只不过在解决思路上采用了“内容和格式分离”的思想,让用户尽可能不被繁琐的排版细节所困扰。

而当我们抛开 LaTex 的拐杖去直面排版问题时,会发现它比我们想象得都要复杂、繁琐和无聊。

比如说常见的“断字与断行”问题,在不考虑断字的情况下,一个占据近一行宽度的字很容易造成这之前的一行较为稀疏,比如下面的这种情况,左侧为较为失败的断行算法,而右侧为较为成功的:

Read more »

一、闲谈

在我进入大学的新同学介绍会上,有个同学说她来自贵州,我想了想,贵州是广西的省会啊,原来是广西人啊!让我尝试为自己辩解一下,这种事情并不能全部怪我,贵州以“州”结尾,除了贵州以外,没有任何一个省份是以“州”结尾的,相反,“广州、潮州、雷州、惠州”都是以“州”结尾的城市。

我一个学过初中地理的人,居然还能把一个省份当成一个城市,多么愚蠢可乐的事情。在我的认知中,贵州是完全缺位的,我不是对它有一个好印象或者一个坏印象,我是完全没有印象。

image-20240124195100752

而实际上贵州是真实存在的,从某个我记不住名字的版块运动开始,随着喜马拉雅山破海而出,贵州就存在了。我在贵阳的博物馆里看到了保存完好的化石,看到了各个民族的文化,我看到的东西并不比我熟悉的东西少了分毫。这种真实的,冒着热气的,在我眼前的庞然大物,居然默许了一个仅有二十多年渺小灵长类的忽视。

Read more »

一、编译原理

在我一开始接触内联汇编的时候,我已经略懂编译的原理了,而这更让我困惑,比如说像这样的内联汇编:

asm volatile("lw a0, 0(%0)"
    :
    : "r"(addr));

会改写寄存器 a0 的值,那如果 a0 原先就被程序中的某个变量占用了呢?那岂不是会造成原来那个变量所参与的行为发生错误?同时 addr 需要被放到一个寄存器中(我们称之为 rx),而 rx 如果之前也被占用了呢?,为了把原来在内存中的变量搬运到 rx 寄存器中,是不是也会

其实内联汇编并不是生硬地将 lw a0, 0(rx) 直接插入到代码里,因为这样确实会因为上述的原因导致程序错误。在实际情况中,内联汇编在编译角度应该被理解成一个类似于函数调用的处理逻辑。也就是说,如果内联汇编中用到了 a0 ,那么在内联汇编前就会有一个机制保存 a0 ,而在内联汇编后则有一个机制恢复原本的 a0 。也就是和“调用者保存寄存器”的逻辑是一样的。

Read more »