首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确对齐同时包含unicode字符和空列表()的列

如何正确对齐同时包含unicode字符和空列表()的列
EN

Stack Overflow用户
提问于 2020-09-16 17:28:59
回答 1查看 47关注 0票数 2

我发现,如果行中包含的值为NIL,则很难对齐列

我尝试指定列宽,然而,在输出中,NIL似乎总是具有与其他unicode字符不同的宽度,因此总是不能正确对齐。有没有一种方法可以实现更好的对齐?(是的,我更喜欢将空列表打印为NIL)

谢谢。

代码语言:javascript
复制
(progn
  (format t "~?" "~5@a ~5@a ~5@a ~5@a ~5@a~%" '(蘋果 () 桔子 () 西瓜))
  (format t "~?" "~5@a ~5@a ~5@a ~5@a ~5@a~%" '(() 茄子 () 菠菜 () 苦瓜)))

OUTPUT (Column not aligned even column width has already been specified 
   蘋果   NIL    桔子   NIL    西瓜
  NIL    茄子   NIL    菠菜   NIL

Would be expecting OUTPUT aligned like below (with NIL occupy the same width as specified) :
 
   蘋果   NIL    桔子   NIL   西瓜
   NIL   茄子    NIL   菠菜   NIL
EN

回答 1

Stack Overflow用户

发布于 2020-09-17 14:52:14

我观察到从()NIL的字符串格式为3个字符,而其他字符为2个字符,因此我尝试将()填充改为~6@a。事实证明,它的效果更好:

代码语言:javascript
复制
(length (format nil "~a" nil))
3

(progn
  (format t "~?" "~5@a ~6@a ~5@a ~6@a ~5@a~%" '(蘋果 () 桔子 () 西瓜))
  (format t "~?" "~6@a ~5@a ~6@a ~5@a ~6@a~%" '(() 茄子 () 菠菜 () 苦瓜)))
   蘋果    NIL    桔子    NIL    西瓜
   NIL    茄子    NIL    菠菜    NIL

拉丁字符和非拉丁字符的宽度是不同的(具体见最后一列),但现在这两列看起来是对齐的。

因此,您必须预先计算每个条目的填充。

可以使用~v指令在指令中插入变量。

代码语言:javascript
复制
(let ((padding 30))
    (format nil "~va" padding "foo"))
;; "foo                           "

(来源:Cookbook)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63917093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档