improve handling of LaTeXStrings in tick labels

This commit is contained in:
Simon Christ 2021-08-19 12:52:12 +02:00
parent 214663aa4b
commit 2754eed7cf

View File

@ -1279,21 +1279,28 @@ function pgfx_axis!(opt::PGFPlotsX.Options, sp::Subplot, letter)
push!(opt, string(letter, "tick") => string("{", join(tick_values, ","), "}")) push!(opt, string(letter, "tick") => string("{", join(tick_values, ","), "}"))
if axis[:showaxis] && axis[:scale] in (:ln, :log2, :log10) && axis[:ticks] == :auto if axis[:showaxis] && axis[:scale] in (:ln, :log2, :log10) && axis[:ticks] == :auto
# wrap the power part of label with } # wrap the power part of label with }
tick_labels = Vector{String}(undef, length(ticks[2])) tick_labels = similar(ticks[2])
for (i, label) in enumerate(ticks[2]) for (i, label) in enumerate(ticks[2])
base, power = split(label, "^") base, power = split(label, "^")
power = string("{", power, "}") power = string("{", power, "}")
tick_labels[i] = string(base, "^", power) tick_labels[i] = string(base, "^", power)
end end
push!( if tick_labels isa Vector{String}
opt, push!(
string(letter, "ticklabels") => opt,
string("{\$", join(tick_labels, "\$,\$"), "\$}"), string(letter, "ticklabels") =>
) string("{\$", join(tick_labels, "\$,\$"), "\$}"),
)
elseif tick_labels isa Vector{LaTeXString}
push!(
opt,
string(letter, "ticklabels") => join(tick_labels)
)
end
elseif axis[:showaxis] elseif axis[:showaxis]
tick_labels = tick_labels =
ispolar(sp) && letter == :x ? [ticks[2][3:end]..., "0", "45"] : ticks[2] ispolar(sp) && letter == :x ? [ticks[2][3:end]..., "0", "45"] : ticks[2]
if axis[:formatter] in (:scientific, :auto) if axis[:formatter] in (:scientific, :auto) && tick_labels isa Vector{String}
tick_labels = string.("\$", convert_sci_unicode.(tick_labels), "\$") tick_labels = string.("\$", convert_sci_unicode.(tick_labels), "\$")
tick_labels = replace.(tick_labels, Ref("×" => "\\times")) tick_labels = replace.(tick_labels, Ref("×" => "\\times"))
end end