问题描述:
商标字符 \textregistered{} 在正文显示正常,而在参考文献显示异常。\texttrademark{} 显示正常。



系统信息:
日志信息:
我搜来搜去都是 StackExchange 上这个回答,现在都 8012 年了,上面两个回答里的问题应该都在 TexLive 2018 里解决了吧
我试了一下,2018也没有解决。
StackExchange 那个跟我遇到情况不一样,而且我版本都比他高。biber 那个说用 2.6 版本,我的已经是 2.11 了。我怀疑是字体问题,试过了 mac/windows/adobe 都一样,参考文献用的是 TeXGyreTermes 字体。我也用 acrobat 改过这个 ő ,不过好像没有一个字体是对应商标字符。
https://groups.google.com/forum/#!topic/comp.text.tex/TGBfSPzMS5Q
这个暴力解决的办法,直接画的图。
\DeclareRobustCommand{\RTM}{\leavevmode\hbox{\ooalign{\hfil\raise.02ex\hbox{\kern.02em\scriptsize\textrm{R}}\hfil\crcr\mathhexbox20D}}}

哈哈,硬核画图。。。那就这样吧,谢谢啦!
可以推送到模板 tex faq,方便后来人
我测试了一下:
title = {Acoustic {\textregistered} {\texttrademark} cloaking in three dimensions using acoustic metamaterials},
thesis.bbl 里 biblatex 的输出是:
\field{title}{Acoustic {®} {\texttrademark} cloaking in three dimensions using acoustic metamaterials}
很诡异的是 \textregistered 被展开成了 UTF-8 的 ®,\texttrademark 却没有展开。
模版西文字体使用的是 T1 格式的,UTF-8 ® 被映射成 ő 了。
画图感觉有点蠢,可以使用系统自带的 TrueType 或 OpenType 字体比如 “Times New Roman”:
% \RequirePackage[defaultsups]{newtxtext} % 注释掉这个字体宏包
\setmainfont{Times New Roman}
或者编译完成后,手动改一下 thesis.bbl,再运行一下 xelatex thesis.tex。
可否只针对 这个 特殊的字符专门设置字体,而不是全部的都设置字体。我试了 roman字体依旧,还没有试过 times new roman
最好是让它不要展开吧。写个脚本改bbl感觉比画图要合理一点。
破案了,是 biber 的锅,我去看了一下 biber 文档和代码,原来 biber 为了排序会把一些 LaTeX 宏命令转换为 UTF-8 字符。我前面“展开”的说法有误。
biber 提供一个参数 --decodecharsset 来控制这种转换,有三个选项 null、base、full。默认是 base,会转换部分的宏,其中有 \textregistered;full 选项会转换更多的宏,包括 \texttrademark;null 则是不转换。
所以编译时给 biber 加个参数 --decodecharsset=null 就可以了。你用脚本编译的话在 .latexmkrc 里加一行:
$biber = 'biber --decodecharsset=null %O %S';
@AlexaraWu ,你这么一研究,我也仔细看了一下文档,并做了翻译。说实话,不像biblatex文档, 一般也没有太多的需求去翻译biber文档,像这种机会刚好可以翻译一下。可以的话,下次研究的时候你顺便把内容翻译了得了,放到https://github.com/hushidong/biblatex-zh-cn 这一起,分享一下。每次增加一点翻译,也许很快就翻完了。
@hushidong 感谢邀请~不过水平有限不一定帮的上忙 :joy:
没事啊,我的水平也很差的,但和wenbo,敢把biblatex手册翻译完了。行动就对了。
Most helpful comment
破案了,是
biber的锅,我去看了一下biber文档和代码,原来biber为了排序会把一些 LaTeX 宏命令转换为 UTF-8 字符。我前面“展开”的说法有误。biber提供一个参数--decodecharsset来控制这种转换,有三个选项null、base、full。默认是base,会转换部分的宏,其中有\textregistered;full选项会转换更多的宏,包括\texttrademark;null则是不转换。所以编译时给
biber加个参数--decodecharsset=null就可以了。你用脚本编译的话在.latexmkrc里加一行: