3

竖直文字排版

 3 years ago
source link: https://blog.xulihang.me/vertical-text-engine/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

竖直文字排版

首页 分类 标签 链接 留言 关于 订阅 2020-10-15

|

分类 技术随笔 

中文、日文和韩文都能够竖直排版,现代日语的书籍还沿用了过去从右往左阅读的竖直排版模式。

翻译日语漫画为中文或者中文翻译为日文时,汉字通常需要竖直排版。

将汉字竖直排列,有一种简单的字符串处理方法,需要规定好每行有几个字,然后将汉字重新进行排列。

B4X示例代码(来源):

Sub MakeItVerticalForCJK(s As String, NumberOfLettersPerColumn As Int) As String
	Dim sb As StringBuilder
	sb.Initialize
	Dim NumberOfColumns As Int = Ceil(s.Length / NumberOfLettersPerColumn)
	For y = 0 To NumberOfLettersPerColumn - 1
		For x = 0 To NumberOfColumns - 1
			Dim Index As Int = (NumberOfColumns - 1 - x) * NumberOfLettersPerColumn + y
			If Index < s.Length Then
				sb.Append(s.CharAt(Index))
			Else
				sb.Append(" ")
			End If
		Next
		sb.Append(CRLF)
	Next
	Return sb.ToString
End Sub

输出示例:

原文:
今天开始和大家一起学习的同学!

输出:
习大今
的家天
同一开
学起始
!学和

汉字和全角标点的宽度高度基本是一致的,所以效果还可以。但如果混入半角标点符号和拉丁字母以及空格,效果就不行了。此外,不能控制每行要显示哪几个字。

我想到可以把文字先转换为图片,然后对图片进行调整,从而实现一个文字竖排引擎,可以供ImageTrans使用。

效果展示:

今日から
みんなと勉強
する事になった、
灰原哀さん
です!

输出图像:

vertical_text.png

竖排时需要遵循日语汉字的排版规则,例如:

  1. 感叹号、冒号居中,顿号、逗号和句号靠右排列
  2. 日语的延长音需要进行旋转,类似的还有竖排引号『』。后者可以直接改用﹃﹄
  3. 英文单词向右旋转90度排列
  4. 位数较小的数字横向排列在一起

一个完善的文字引擎还需要考虑斜体加粗等富文本格式、字间距、行距、对齐等内容,较为复杂,目前我还没有实现。

相关文章:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK