分类 软件 下的文章

本来想写一大堆,后来发现这件事情在理论上是不可行的,然后就放弃了。

首先的原因是了解到作为gcc的C++标准库,libstdc++是后向兼容的(这里的“后”指时间上的“过去”),也就是说,新版本libstdc++支持旧版本编译出来的程序,而反过来不行。这是因为libstdc++库是以一种类似于增量更新的方式实现的,使用strings指令查看libstdc++.so文件可以发现,它包含了从最早版本以来一系列的符号支持,这也正是其后向兼容的原因。

由于没有前向兼容,导致过去的gcc不是适应未来的编译环境。以我的体验为例,用gcc 8.4.1编译gcc 4.9.4,前者的libstdc++ABI应用二进制接口版本是CXXABI_1.3.9,而后者的只有CXXABI_1.3.8

而问题正是出在这里。由于gcc和libstdc++属于紧密耦合的关系,gcc会使用自带的libstdc++而不是当前系统的版本来提供运行环境。使用了gcc 8.4.1编译的gcc 4.9.4自然是按照前者的运行库,使用了CXXABI_1.3.9;而当gcc 4.9.4运行的时候,从自己的libstdc++库里一翻,只支持到CXXABI_1.3.8,啪的一下就因为找不到符号报错了,很快啊。

当然这个可以通过使用LD_PRELOAD强行让gcc 4.9.4使用系统libstdc++库来解决这个问题,但是后面还有更麻烦的。我前几年编译gcc的文档里提到过,gcc的编译是自举的,相当于先编译gcc核心-编译c++库-再编译gcc扩展这个流程。

然而,使用LD_PRELOAD只是解决了第二步中的一个问题,重点在于libstdc++在版本更新的时候,可能不止更新ABI,还更新了上层的API,可能编着编着发现函数不见了,或者签名改了,直接报错中断,问题还没等到链接阶段就已经出现了。要解决这个问题约等于更改gcc对应的libstdc++库依赖,这严重违反了两者现有的紧密依赖的特点。这也正是我选择放弃降级编译gcc最主要的原因。

最后的结论是,CentOS 8是个什么垃圾东西,CentOS 7+devtoolset它不香吗

LaTeX一种规范的使用方法是,将文章内容按照节分开,储存在不同的文件中,然后再在主文件中使用\input{}指令引入所有需要的内容。这样做的好处是条理清晰,可以按照文件名管理内容,也便于缩短单文件文字长度,便于查找内容。

而TexLive自带的编辑器TeXworks默认会将需要编译的文件设置为当前的打开文件,直接编译显然会出错,而每次编译需要切回主TeX文件在操作上很麻烦。而TeXworks构造简单,没有项目的概念,因而巧妙地采用了LaTeX注释的方法建立文件见的联系。

通过在被引用TeX文件头部加入诸如

% !TeX root=main-document.tex

的注释,可以被TeXworks解析出来,不会以当前文件为主TeX文件,而是以main-document.tex为主文件进行编译。

需要注意的是,!TeX是一个整体,不能在!TeX之间加入空格,否则TeXworks会识别不出来,继续按照单文件进行编译。

参考:https://tex.stackexchange.com/questions/377702/how-to-work-and-compile-efficiently-in-a-multi-file-project-in-texworks

这个问题一般出现在Windows环境下,采用\input{}指令导入的文件正确地与当前文件置于同一目录下,但LaTeX编译器还是获取不到。这可能与Windows下LaTeX的实现有关,在文件名中带空格的时候会出现这个问题,解决方法是将文件名用双引号"包裹起来。

公式标号

在Word 2016中,可以通过在公式框内部用“#+要标注的内容”实现自动的右侧标号功能,带章节编号的公式标号可以通过在公式内插入题注的方法实现;勾上“从题注中排除标签”可以隐藏题注中的“公式”二字,只显示数字标号。


多层级的图表编号

在Word里,光用一二三级大纲是不能自动给图片和表格进行比如图3.1.1这种格式的标注的,因为Word认为大纲只是区分级别,但并不给每一级标题编号。然而如果将“第一章”、“第二章”这种章节标题作为列表表头的话,在页眉中用StyleRef做的标头又不能显示出来。解决思路之一是将章节标题这一级的表头设置成背景色,然后通过调节章节这行段落的左右侧缩进来实现等效的居中效果。这样既能不显示出额外添加的列表的标头,又能利用列表对图标进行多级编号。

症状:打开Word,弹几下直接自动退出,什么都不显示;但是打开Excel和PowerPoint都是正常的。

解决方法:删除~/Library/Containers/com.microsoft.Word文件夹,这样可以重置该组件的配置。Office官方售后里说的那个删dotm模版根本不起作用。

根据这个方法可以类推,Office的哪个组件打不开了,就删除~/Library/Containers/com.microsoft.XXXX文件夹,还原该组件的所有配置。XXXX替换成要修复的组件,比如Excel。