我正在尝试使用 titlesec 和 Tikz 创建自定义部分样式。我当前的代码如下:
\usepackage{tikz}
\usepackage[explicit]{titlesec}
\definecolor{mygreen}{RGB}{25,170,75}
\titleformat{\section}[display]{\bfseries \color{mygreen} \huge} {}{0pt}
{
\thesection \hspace{0.5cm} #1 \\
\begin{tikzpicture}
\draw[fill=mygreen, mygreen, rounded corners, xshift=-2cm](0.1\paperwidth, 0cm) rectangle (0.9\paperwidth, 0.1cm);
\end{tikzpicture}
}
\\
请注意,tikz 正在做的是一个简单的矩形,其功能是给文本加下划线。我必须在文本和 Tikz 之间添加换行符 ( ) 以确保良好的定位。我有两个问题:
我想控制行的起始位置,从页面的左边距开始 - 但现在它与文本的左下角对齐。目前我有一个
xshift=-2cm
,但这不是一个好的解决方案,因为我使用的是双面文档,奇数页和偶数页的边距不同。我无法控制行和文本之间的垂直间距。我尝试删除换行符并使用一些
vspace
,但结果看起来不太好。
我知道current page
Tikz 中的节点,但它似乎总是给出绝对位置,我不知道该部分的坐标在哪里。我在论坛和手册中搜索了几个小时,但还是找不到解决方案。有没有什么方法可以控制下划线的位置?
非常感谢!
答案1
您可以使用tikzpagenodes
和tikzmark
。
\documentclass{article}
\usepackage{tikzpagenodes}
\usetikzlibrary{tikzmark}
\usepackage[explicit]{titlesec}
\definecolor{mygreen}{RGB}{25,170,75}
\titleformat{\section}[display]{\bfseries\color{mygreen}\huge}{}{0pt}
{\thesection \hspace{0.5cm} #1\tikzmark{s-\number\value{section}}
\begin{tikzpicture}[overlay,remember picture]
\path (pic cs:s-\number\value{section}) coordinate (tmp);
\draw[fill=mygreen, mygreen, rounded corners=1pt]
([yshift=-1ex]tmp-|current page text area.west) rectangle
([yshift=-1ex-1mm]tmp-|current page text area.east);
\end{tikzpicture}
}[\vspace{2mm}]
\begin{document}
\section{A section}
Blah blub
\section{Another section}
Blah blub pft
\clearpage
\section{Yet another section}
Blah blub pft
\end{document}