LaTeX 自动避免重复内容

在编辑自动化文档时,很容易出现在文档多处提及相同内容的情况。例如,描述某具体设备的图片,在多个工艺中都会用到,而又无法确定工艺出现顺序,或者对于不同企业,工艺不尽相同。这时我们可能会希望,latex帮助我们保留第一次出现的图片,而不输出后出现的相同图片,并且维护所有对这张图片的引用。

要实现此功能,直觉地感到:

  1. 代码要能判断某个指令或标签是否已经被定义;
  2. 若已经定义,则不执行任何操作;
  3. 若未定义,则定义之,并输出内容。

在tex底层,存在一个识别指令名是否被定义的指令:@ifundefined{指令名不带斜杠}{执行内容}

对于该指令,有两点需要注意:

  1. 指令的名称包含符号 @,需要在使用之前执行makeatletter将其视为一般字符,在之后执行makeatother恢复其为特殊符号;
  2. 第一个参数是不带斜杠的指令名,允许由其他宏指令组成。

而在已知一个要定义的名称,而这个名称需要由上下文决定的宏指令构成时,newcommand就不适用了,因为它不支持从文本创建指令。此时需要tex的另一个指令:@namedef{指令名不带斜杠}{执行内容}

对于该指令,也同样需要注意之前提到了两点注意事项。

下面给出一个tex文件片段:

 

此片段在编译后,只会出现一幅图片,后两段的引用指向第一次出现的标签位置。

如果取消掉注释的两行,则用户变量在过程中变化,编译后会出现3幅图片,每个段落引用各自的标签位置。

VS 2012 以及更高版本编写 XP 兼容 exe

https://stackoverflow.com/questions/12319952/how-do-i-target-net-4-0-3-on-xp-using-visual-studio-2012-application-fails-to

 

在Win 10 上使用VS 2012及更高版本编译执行程序(exe),放到 XP 系统运行会出现 “不是合法的win32应用程序” 错误。这是由于编译器在程序头中写入了最小系统版本要求,以至于XP认为无法执行。

通过VS命令行工具,调用 editbin 执行下述命令:

其中 $(TargetPath) 为VS宏指定的exe文件输出位置,也可以用实际的程序路径。

 

DotNetZip (Ionic.Zip) 中文支持问题

参考:https://stackoverflow.com/questions/44816190/dotnetzip-ionic-zip-dll-doesnt-work-with-compress-chinese-file-or-folder-name

使用默认构造函数将导致编码不支持中文,表现为带有中文字符的文件、文件夹无法添加到压缩包。

解决方案是,使用带有编码参数的构造函数重载,并传递 System.Text.Encoding.Default .

 

崩溃的脑壳