我原以为您的第二个示例(带有高压盒)应该可以工作。但似乎@\n 没有我们期望的行为。
解决方案1:强制右括号前换行,即用@\n替换@。
let () =
Format.printf "@.";
Format.printf "@[<hov 2>(---@\n@[<hov 2>(---@\n@[<hov 2>(---@\n)@]@\n)@]@\n)@]@\n";
Format.printf "@."
结果:
(---
(---
(---
)
)
)
问题:总会有一个换行符,它永远不会打印:
(---(---(---)))
即使它有空间。如果这对您来说是个问题,请参阅解决方案 2。
解决方案 2:使用更长的行 :) 如果中断是由长行引起的,那么 hv 框会在右括号之前中断行。
let () =
Format.printf "@.";
Format.printf "@[<hv 2>(------------------------------------------------------------------------@,@[<hv 2>(---@,@[<hv 2>(---@,)@]@,)@]@,)@]";
Format.printf "@."
结果:
(------------------------------------------------------------------------
(---(---))
)
但是,右括号与左括号不对齐。
解决方案3:如果要右括号与左括号对齐,则需要两个框。
let () =
Format.printf "@.";
Format.printf
"@[<hv>@[<hv 2>(------------------------------------------------------------------------\
@[<hv>@[<hv 2>(------------------------------------------------------------------------\
@[<hv>@[<hv 2>(------------------------------------------------------------------------\
@]@,)@]@]@,)@]@]@,)@]";
Format.printf "@."
结果:
(------------------------------------------------------------------------
(------------------------------------------------------------------------
(------------------------------------------------------------------------
)
)
)