在Julia中打印变量下标

时间:2017-10-10 16:51:03

标签: julia

嘿所以我知道由于Julia one中的Unicode支持,可以通过键入a\_1<TAB>来编写带有下标1的字母a。现在,如果我想做以下事情,该怎么办?

for i in [1 2 3]
    println("a\_i")
end

并将输出写为

a₁
a₂
a₃

如果不自己写下所有可能的下标,我该如何解决这个问题?

3 个答案:

答案 0 :(得分:8)

你可以这样做(至少在版本0.6中):

ltx = Base.REPLCompletions.latex_symbols

for i in 1:3 
    println("a$(ltx["\\_$i"])") 
end

答案 1 :(得分:1)

BogumiłKamiński的答案似乎是最好的,但我需要颠倒顺序以获得两位数字的正确字符串:

subscript(i::Integer) = i<0 ? error("$i is negative") : join('₀'+d for d in reverse(digits(i)))

for i=7:13 println("a"*subscript(i)) end

答案 2 :(得分:0)

在这里以其他答案为基础,我编写了一组函数,以允许使用负数并处理更复杂的上标情况。

function subscriptnumber(i::Int)
    if i < 0
        c = [Char(0x208B)]
    else
        c = []
    end
    for d in reverse(digits(abs(i)))
        push!(c, Char(0x2080+d))
    end
    return join(c)
end

function superscriptnumber(i::Int)
    if i < 0
        c = [Char(0x207B)]
    else
        c = []
    end
    for d in reverse(digits(abs(i)))
        if d == 0 push!(c, Char(0x2070)) end
        if d == 1 push!(c, Char(0x00B9)) end
        if d == 2 push!(c, Char(0x00B2)) end
        if d == 3 push!(c, Char(0x00B3)) end
        if d > 3 push!(c, Char(0x2070+d)) end
    end
    return join(c)
end
julia> for i in [1 -2 3]
           println("a"*superscriptnumber(i))
           println("a"*subscriptnumber(i))
       end
a¹
a₁
a⁻²
a₋₂
a³
a₃