![Tikz 在顶部绘制元素相对于底部元素对齐](https://linux22.com/image/422928/Tikz%20%E5%9C%A8%E9%A1%B6%E9%83%A8%E7%BB%98%E5%88%B6%E5%85%83%E7%B4%A0%E7%9B%B8%E5%AF%B9%E4%BA%8E%E5%BA%95%E9%83%A8%E5%85%83%E7%B4%A0%E5%AF%B9%E9%BD%90.png)
我正在尝试制作一个 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};
但我怀疑如果我想调整条形图的大小,稍后可能会遇到对齐问题。有没有办法让其相对于底部节点宽度中点完美对齐?
任何帮助都将不胜感激。感谢您的阅读。