5 如何将中文句号“。”映射为全角英文句号"."?

发布于 2024-08-03 10:11:30

在创作数学文章时,时常会遇到句号的转换问题,中文句号优势会引起歧义(下标0),并且添加在公式或者字母后显得不合理。以前的处理思路是全局替换,但是不足之处在于:

  1. 有时临时调整一些内容,会忘记替换;
  2. 创作长文档,尤其是数十个tex子文件用input合并时,一个一个去替换又太不科学。

联想到exam-zh有全文的句号映射,不知道是如何做出来的?

查看更多

关注者
1
被浏览
699
3 个回答
Thallo
Thallo 2024-08-04
这家伙不懒,但还是什么也没写

不管怎么说,使用编辑器进行全局替换(快捷键一般是 Ctrl+F)都是最好的方案,因为这在编译前替换省去了不少可能出现的问题。如果你想在部分场景下替换,可以考虑下面的代码。

\documentclass{ctexart}
\newcommand\myrep[1]{.\relax}
\newXeTeXintercharclass\rep
\XeTeXcharclass `。=\rep
\XeTeXinterchartoks 0 \rep  {\myrep}
\XeTeXinterchartoks \rep \rep  {\myrep}
\XeTeXinterchartoks 4095 \rep  {\myrep}
\begin{document}
.....

。。。。。。

......
\end{document}

效果如下

image.png

陈思洲
陈思洲 2024-08-03
这家伙很懒,什么也没写!

%%%句号的映射
usepackage{newunicodechar}
newunicodechar{.}{。}

Sagittarius Rover
Sagittarius Rover 2025-02-07
我要成为Typst糕手/(ㄒoㄒ)/~~

查看exam-zh.cls中有关fullwidth-stop的内容可知:

\AtEndOfPackageFile* { xeCJK }
  {
    \msg_redirect_name:nnn { xeCJK } { CJKfamily-redef } { none }
    \defaultCJKfontfeatures
      {
        Script  = CJK,
        % Mapping = fullwidth-stop ,
      }
  }

进一步逆向检索xeCJK的文档又可知:
image.png

于是一个最小工作示例如下:

\documentclass{ctexart}
\setCJKmainfont[Mapping=fullwidth-stop]{SimSun}
\begin{document}
.....

。。。。。。

你好,世界。

Hello, world.
 
\end{document}

image.png

附:若参考张晨南老师的博客内容,可以更进一步自定义字符映射

另外对于你自答中的newunicodechar宏包的使用是否在ctex文档类以及不同编译引擎(PDFLaTeX,XeLaTeX,LuaLaTeX)中均生效,To Be Continued.... 有关的讨论也可以见这个问题中雾月老师的回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览