请选择 进入手机版 | 继续访问电脑版

LibreOffice 中文社区

 找回密码
 马上加入

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
开启左侧

[已解决] Calc中录入西文字体不能按西文格式显示

[复制链接]
grassvalley 发表于 2019-12-31 16:00:08 | 显示全部楼层 |阅读模式
操作系统ubuntu19.10 64位,libreoffice 6.3.2 ~ 6.3.3 ~ 6.3.4
我定义了默认的样式,中文使用 方正兰亭黑,西文使用 source code pro,两种不同的字体。
在一片区域中,应用样式后,中文和西文会按设置的字体显示。
但是,当我在西文单元格,比如数字单元格里再录入数字时,这时候字体就会变成 方正兰亭黑,而不是原来的Source Code Pro。
感觉好像是,在修改单元格后,把修改后的单元格都认为是中文了。
在libreoffice 6.2版本中不存在这个问题我下载了预览版的6.4.0.1,这个问题仍然存在,也许只牵涉到中文

ps:我平时不用wps的一个重要原因就是,wps里定义的样式,中文和西文不能使用不同的字体


驿窗 发表于 2019-12-31 16:14:55 | 显示全部楼层
我试了一下,6282没有这个问题,6400有这个问题~
 楼主| grassvalley 发表于 2019-12-31 16:18:49 | 显示全部楼层
本帖最后由 grassvalley 于 2019-12-31 16:40 编辑

是的,从6.3开始,一直到6.4都这样,以前没有这问题在测试,发现问题很奇怪。
如果对单元格定义了样式以外的字体比如宋体,然后录入西文会是西文样式的字体,但是录入中文会是原来定义的字体比如宋体。


另外,在windows10环境下,还是这样

高原之狼 发表于 2020-1-1 16:49:47 | 显示全部楼层
suokunlong 发表于 2020-1-14 23:42:38 | 显示全部楼层
各位,上游的那个bug中我已经提供了大量的调试信息(包括二进制二分法查找定位造成问题的commit范围,然后进一步通过commit层面的bisect找到确切的问题commit),已经帮助造成这个倒退问题的原commit作者找到了问题所在,补丁已经提交到了gerrit,很快就会修复了,届时升级到最新版本即可解决该问题。

具体来说,在commit 6f810e3d7dafcd7d0101173a501786226f4d8886 中的 sc/source/core/data/documen6.cxx  文件中,原 commitor  Luboš Luňák 为了修复另外一个bug对代码进行了一些调整,但是在使用 ScCellFormat::GetString() 这个函数时,由于这个函数有两个变体,一个返回值是字符串值,而另一个是通过指针(?)将值传递给参数但返回值是void,但作者在那个代码中没有将前者(即返回字符串值的那个函数)的值传递给变量 aStr。这就导致循环到代码的 else 中时,aStr 的值永远是空的,由此程序无法通过获取用户输入到单元格中的文字来通过GetStringScriptType函数正确判断文字语言类型。

参见:
旧代码:https://cgit.freedesktop.org/lib ... 73a501786226f4d8886
gerrit中等待审核的补丁:https://gerrit.libreoffice.org/c/core/+/86750

话说,这种问题只能我们中文社区来努力调试找问题,官方的开发者大多都是西文环境,默认不使用两种不同字体,因此这种问题很难发现并即时解决。所以,大家谁如果有一些c++基础的话,多多帮忙调试并解决bug吧!p.s. 我不是程序员,对c++了解非常少。
开放,包容,奉献。
suokunlong 发表于 2020-1-15 18:48:07 | 显示全部楼层
已在master版本上修复,将会cherry-pick到6.4和6.3版本。
https://cgit.freedesktop.org/lib ... bce4cc37fa30581acac

开放,包容,奉献。
驿窗 发表于 2020-1-16 09:10:49 | 显示全部楼层
master版本,是指当前正在开发中的主要版本?
suokunlong 发表于 2020-1-16 09:13:25 | 显示全部楼层
Bug修复将会在以下版本中体现:
target:6.5.0 target:6.4.1 target:6.3.5

开放,包容,奉献。
suokunlong 发表于 2020-1-16 09:21:10 | 显示全部楼层
驿窗 发表于 2020-1-16 09:10
master版本,是指当前正在开发中的主要版本?

Master版本,是git版本控制系统中的说法,它是指代码线的主线。一般来说,一个git仓库默认的主代码线是master; 在代码开发的不同时期,又会衍生出基于master的多个分支,比如libreoffice-6-3分支、libreofgice-6-4分支等,同时分支上又会再有小分支。

LibreOffice的代码修改、功能增加总是先在master上体现,然后会被逐渐合并到其它分支。并不是所有的代码都会向其他分支合并,对于稳定版分支,只会合并对严重bug的修复、安全漏洞等代码,并且会确保对这些分支代码的修改是安全、不会造成新的倒退缺陷的。

以上是我的理解,不一定对。


开放,包容,奉献。
驿窗 发表于 2020-1-19 10:46:03 | 显示全部楼层
大概理解了~
您需要登录后才可以回帖 登录 | 马上加入

本版积分规则

Archiver|手机版|小黑屋|LibreOffice 中文社区 ( 粤ICP备13080851号-4 )

GMT+8, 2020-4-4 10:15 , Processed in 0.119378 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表