Tikz 在顶部绘制元素相对于底部元素对齐

Tikz 在顶部绘制元素相对于底部元素对齐

我正在尝试制作一个 Latex 命令,允许我部署某种进度条。理想情况下,目标是这样的:

在此处输入图片描述

顺便说一句,我稍后可能会用箭头或其他东西替换这个进度条。无论如何,这是迄今为止的相关代码

https://www.overleaf.com/read/nmmdhbrncrhh

    \documentclass{article}
    \RequirePackage{tikz}
    \usetikzlibrary{arrows, backgrounds}
    
    \definecolor{cvblue}{HTML}{0E5484}
    \colorlet{maincolor}{cvblue}
    \colorlet{skillbg}{black!25}
    \colorlet{iconcolor}{maincolor!90}
    
    \newlength\sidebarwidth%
    \newlength\topbottommargin%
    \newlength\leftrightmargin%
    \newlength\sidebartextwidth
    
    \setlength{\sidebarwidth}{0.34\paperwidth}
    \setlength{\topbottommargin}{0.02\paperheight}
    \setlength{\leftrightmargin}{0.02\paperwidth}
    \setlength{\sidebartextwidth}{\sidebarwidth - 2\leftrightmargin}
    
    \newcommand{\logo}[1]{\includegraphics[align=c, width=1.5em]{#1}}
    
    \newcommand{\barskilltwo}[4]{ 
        % remove 1pt in width to prevent overfull box warnings
        \begin{tikzpicture}[x=\sidebartextwidth-1pt, y=2ex]
                \draw[fill, skillbg, rounded corners=0.5em] 
                    (0, 0) rectangle (1, 1) node[midway][text=black] {#4};
                \draw[fill, iconcolor!70, rounded corners=0.5em] 
                    (0, 0) rectangle (#3/100, 1);
                \node[above right] at (0, 1) {\cvicon{#1} ~ #2};
        \end{tikzpicture}
        \par
    }
    
    \begin{document}
        \barskilltwo{\logo{pics/tech_languages/c++.png}}{C++}{100}{Six Years}
        \barskilltwo{\logo{pics/tech_languages/python.png}}{Python}{100}{Six Years}
        \barskilltwo{\logo{pics/tech_languages/c.png}}{C}{45}{Three Years}
        \barskilltwo{\logo{pics/tech_languages/java.png}}{Java}{20}{Two Years}
        \barskilltwo{\logo{pics/tech_languages/csharp_purple.png}}{C\#}{10}{One Year}
    \end{document}

效果如下:

在此处输入图片描述

如您所见,存在一个问题,即文本被第二个蓝条隐藏了。

我的目标是位于所有其他元素之上的文本,但相对于底部元素的中点对齐通过节点[中途]

这样的事情可能吗?实现第一个屏幕截图中描述的效果的最佳方法是什么?

我也尝试过像这样创建一个新节点:

    \newcommand{\barskilltwo}[4]{ 
        % remove 1pt in width to prevent overfull box warnings
        \begin{tikzpicture}[x=\sidebartextwidth-1pt, y=2ex]
                \draw[fill, skillbg, rounded corners=0.5em] 
                    (0, 0) rectangle (1, 1);
                \draw[fill, iconcolor!70, rounded corners=0.5em] 
                    (0, 0) rectangle (#3/100, 1);
                \node[above right] at (0, 1) {\cvicon{#1} ~ #2};
                \node[midway][text=black] {#4};
        \end{tikzpicture}
        \par
    }

但这需要手动对齐,并且不能保证与底部元素的中点对齐。

这可以通过在底部添加一个额外的节点来解决:

\node(text) at (0.5,0.5){#4};

但我怀疑如果我想调整条形图的大小,稍后可能会遇到对齐问题。有没有办法让其相对于底部节点宽度中点完美对齐?

任何帮助都将不胜感激。感谢您的阅读。

相关内容