我正在准备我的简历,想自定义部分标题。
我想要一个水平线填写空白处(线宽)在节标题之后。
以下是我到目前为止能够做的事情:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[hmargin=1.25cm, vmargin=1.25cm]{geometry}
\usepackage[explicit]{titlesec}
\usepackage[x11names]{xcolor}
\usepackage{xhfill}
\titleformat{\section}{\Large\raggedright}{}{0em}{\textcolor{gray}{\rule{5mm}{3mm}} #1 \xhrulefill{gray}{3mm}}
\begin{document}
{\noindent\Huge{John Doe}}
\section{Education}
\end{document}
有人可以建议如何实现这一点吗?
答案1
受@muzimuzhiZ 的回答启发,使用一个框来导出标题的长度。对于多行标题,它根本不起作用。
\documentclass{article}
\usepackage[hmargin=1.25cm, vmargin=1.25cm]{geometry}
\usepackage[explicit]{titlesec}
\usepackage[x11names]{xcolor}
\usepackage{tikz}
\usepackage{lipsum}
\newsavebox\MyBox
\titleformat{\section}{\Large\raggedright}{}{0em}{%
\tikz\fill[black](0,0) rectangle (5mm,3mm);%
\sbox\MyBox{\ #1\ }\usebox\MyBox%
\tikz\fill[left color=black, right color=black!20] (0,0) rectangle (\linewidth-5mm-\the\wd\MyBox, 3mm);%
}
\begin{document}
{\noindent\Huge{John Doe}}
\section{Education}
\lipsum[1]
\section{Test of longer section}
\lipsum[2]
\end{document}
答案2
- 使用包
\linegoal
中的linegoal
方法来获取当前行的剩余宽度。 - 使用
tikz
包用阴影(水平颜色渐变)填充矩形。xhfill
使用\leader
窄彩色规则填充剩余的线,因此不能应用阴影。 \linegoal
会将位置信息写入辅助文件,因此不能直接在坐标中使用tikz
。因此,其扩展值存储在临时长度中\mylinegoal
。
\documentclass{article}
\usepackage[hmargin=1.25cm, vmargin=1.25cm]{geometry}
\usepackage[explicit]{titlesec}
\usepackage[x11names]{xcolor}
\usepackage{tikz}
\usepackage{linegoal}
\newlength\mylinegoal
\makeatletter
\newcommand\setlinegoal{%
\setlength\mylinegoal{\linegoal}%
% draw only when \linegoal expands to the remaining length
\ifdim\mylinegoal=\linewidth
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi
}
\makeatother
\titleformat{\section}{\Large\raggedright}{}{0em}{%
\textcolor{gray}{\rule{5mm}{3mm}} #1 %
\setlinegoal{%
\tikz\fill[left color=gray, right color=black!20]
(0,0) rectangle (\mylinegoal, 3mm);%
}%
}
\begin{document}
{\noindent\Huge{John Doe}}
\section{Education}
\section{Test loooong loooong loooong loooong loooong loooong loooong title}
\end{document}