我想重新构建简历中的“知识”部分(技能水平)。从结构上讲,我希望使其类似于此,只是使用“平面”矩形:文本中的内嵌图形表示加载
不幸的是,我没能把这些点调整成一个平面矩形。
其次,我仍然有点不确定应该采用哪种变体(我需要先在完成的简历中看到它 - 但猜测它将是变体 2):
变体 1:
变体 2:
我会尝试通过坐标来定义单个矩形,即将它们预定义为“固定”。
例如通过:
\begin{tikzpicture}
\coordinate (Level1_Start) at (0,2.3);
\coordinate (Level1_14) at (0.5,2.3); %Level 1 - 1/4
\coordinate (Level1_12) at (1,2.3); %Level 1 - 1/2
\coordinate (Level1_34) at (1.5,2.3); %Level 1 - 3/4
\coordinate (Level1_End) at (2,2.3);
\coordinate (Level2_Start) at (2.5,2.3);
\coordinate (Level2_14) at (3,2.3); %Level 2 - 1/4
\coordinate (Level2_12) at (3.5,2.3); %Level 2 - 1/2
\coordinate (Level2_34) at (4,2.3); %Level 2 - 3/4
\coordinate (Level2_End) at (4.5,2.3);
\coordinate (A) at (Level1_Start);
\coordinate (B) at (Level1_14);
\coordinate (C) at (Level1_12);
\coordinate (D) at (Level1_34);
\coordinate (E) at (Level1_End);
\draw[red!50, line width=6pt] (A) -- (E); %Draw Level 1 from start to end (6pt red)
\coordinate (A) at (Level2_Start);
\coordinate (B) at (Level2_14);
\coordinate (C) at (Level2_12);
\coordinate (D) at (Level2_34);
\coordinate (E) at (Level2_End);
\draw[red!50, line width=6pt] (A) -- (B); %Draw Level 2 from start to 1/4 (6pt red)
\draw[gray!50, line width=4pt] (B) -- (E); %Draw Level 2 from 1/4 to end (4pt gray)
%and so on
\end{tikzpicture}
有了技能/名字等,我也会做类似的事情。
有没有更好、更优雅的解决方案?
答案1
这里有一个使用非常具体的建议dash pattern
。首先在整个长度上绘制灰色部分,该部分将被红色部分覆盖。
红色部分也是比较有趣的部分,为此我设置x
为一个单条长度的值,这样我们就可以#2
直接用作X坐标值。但是,我们需要再次添加分隔空间,这是通过 来完成的xshift
。
您可以使用值skill bar width
、skill bar items
和skill bar sep
来更改值的解释和绘制方式。
样式skill bar
、skill bar bg
和skill bar fg
可用于更改可视化效果(其他颜色、其他线宽)。
和键指示 TikZ 生成宽度恰好为 的图表。键用于垂直对齐图表,并且可能会根据您实际使用的字体进行调整trim left
。trim right
\linewidth
baseline
默认情况下,\tikzskillbar
使用 的宽度。这允许它在的列内或具有固定长度的任何其他列\linewidth
内使用(即、或)。X
tabularx
tabular
p
m
b
我添加了显示所有步骤的循环(不过,您始终可以使用 0 到 之间的任意数字skill bar items
)。
减法.00001
避免了整数值的渲染问题,因为这可能会导致红色碎片:
红色部分也可以用以下定义\tikzskillbar
(不同的x
值和禁用skill bar
样式)分成单独的部分来绘制:
\newcommand*\tikzskillbar[2][]{%
\begin{tikzpicture}[
skill bar diagram,#1,skill bar diagram init,
x=\tsbbarlength+\tsbseplength,skill bar/.code=]
\draw[skill bar bg, dash pattern=on \tsbbarlength off \tsbseplength]
(0,0) -- (\linewidth,0);
\foreach[parse=true] \step in {0,...,(int(#2)-1)}
\draw[skill bar fg] (right:\step) -- ++(right:\tsbbarlength);
\draw[skill bar fg] (right:{int(#2-.00001)})
--++(right:{\tsbbarlength*frac(#2)});
\end{tikzpicture}}
代码
\documentclass[a5paper]{article}
\usepackage{tikz}
\tikzset{
skill bar width/.initial=\linewidth,
skill bar items/.initial=5,
skill bar sep/.initial=1mm,
skill bar diagram/.style={baseline=+-.75ex,trim left=+0pt},
skill bar diagram init/.style={
trim right=\pgfkeysvalueof{/tikz/skill bar width},
/utils/exec=%
\pgfmathsetlengthmacro\tsbseplength{\pgfkeysvalueof{/tikz/skill bar sep}}%
\pgfmathsetlengthmacro\tsbbarlength{%
(\pgfkeysvalueof{/tikz/skill bar width}-(\pgfkeysvalueof{/tikz/skill bar items}-1)
*(\pgfkeysvalueof{/tikz/skill bar sep}))/(\pgfkeysvalueof{/tikz/skill bar items})}},
skill bar/.style={dash pattern=on \tsbbarlength off \tsbseplength},
skill bar bg/.style={skill bar, draw=gray, line width=2pt},
skill bar fg/.style={skill bar, draw=red, line width=6pt}}
\newcommand*\tikzskillbar[2][]{%
\begin{tikzpicture}[skill bar diagram,#1,skill bar diagram init,x=\tsbbarlength]
\draw[skill bar bg](0,0)--(right:{\pgfkeysvalueof{/tikz/skill bar width}});
\draw[skill bar fg](0,0)
--++([xshift={int(#2-.00001)*\pgfkeysvalueof{/tikz/skill bar sep}}]right:{#2});
\end{tikzpicture}}
\usepackage{tabularx}
\newenvironment*{skilltab}{\tabularx{\linewidth}{@{}lX@{}}}{\endtabularx}
\begin{document}
\section*{Knowledge}
\subsection*{Language}
\begin{skilltab}
German & \tikzskillbar{4.5} \\
English & \tikzskillbar{3.75}
\end{skilltab}
\subsection*{IT}
\begin{skilltab}
Word & \tikzskillbar{4.5} \\
Excel & \tikzskillbar{3} \\
Powerpoint & \tikzskillbar{2.25}
\end{skilltab}
\vspace{1em}
\foreach \STEP in {0, ..., 12}{%
\noindent\tikzskillbar[
skill bar width=3cm, skill bar sep=.5mm, skill bar items=3]{\STEP/4}\par}
\end{document}
输出
答案2
欢迎来到 TeX.SE!!!
这将创建一个 Ti钾Z 宏绘制所需的矩形并\clip
绘制红色矩形。
\documentclass{article}
\usepackage{lipsum} % dummy text
\usepackage{tikz} % beautiful drawings
\newcommand{\level}[1]
{%
\begin{tikzpicture}[xscale=1.6,yscale=0.4]
\pgfmathsetmacro\xmax{#1+0.25*int(#1)}
\foreach\i in {0,...,4}
\fill[gray] (1.25*\i em,0.25ex) rectangle ++(1em,0.75ex);
\clip (0em,-0.75ex) rectangle ++(\xmax em,2.75ex);
\foreach\i in {0,...,4}
\fill[red] (1.25*\i em,-0.25ex) rectangle ++(1em,1.75ex);
\end{tikzpicture}%
}
\begin{document}
\lipsum[1]
\begin{table}[ht]\centering
\begin{tabular}{ll}
Word & \level{4.5}\\
Excel & \level{3}\\
Powerpoint & \level{2.25}
\end{tabular}
\end{table}
\lipsum[2]
\end{document}