在 moderncv 子节左侧插入小彩色框,无需使用 \hspace

在 moderncv 子节左侧插入小彩色框,无需使用 \hspace

我有这个代码:

\documentclass{moderncv}
\usepackage{fontspec}
\firstname{test}
\familyname{test}
\moderncvstyle{casual}
\moderncvcolor{blue}

\newcommand{\colsubsection}[1]{\subsection{\hspace{-5mm}%
\textcolor{color1}{%
\rule{2mm}{2mm}}\hspace{2mm} #1}}

\begin{document}

\section{test}
\colsubsection{test}
\cvlistitem{test}

\end{document}

其结果是:

结果

这种使用方法\hspace似乎不太“稳定”:间隙是估算的,因此并不准确,间隙是硬编码的,因此如果我将来更改某些内容,很容易被破坏。由于我不知道如何改进该代码片段,我很好奇其他人将如何解决这个问题。

Box 应与 的蓝线右对齐\section,这意味着它应从与\section线相同的宽度开始(从右侧看)。此外,颜色框与文本“test”之间的间隙应等于 的彩色线与文本“test”之间的间隙。与任何其他命令\section之间的 y 方向位置(垂直间隙)应保持不变。\subsection

答案1

首先,为什么要定义自定义子节命令而不是重新定义默认命令?对我来说,重新定义它更有意义。我接下来做的是在 moderncv 中查找节/子节定义。它们如下:

\RenewDocumentCommand{\section}{sm}{%
  \par\addvspace{2.5ex}%
  \phantomsection{}% reset the anchor for hyperrefs
  \addcontentsline{toc}{section}{#2}%
  \cvitem[0ex]{\strut\raggedleft\raisebox{\baseletterheight}{\color{color1}\rule{\hintscolumnwidth}{0.95ex}}}{\strut\sectionstyle{#2}}%
  \par\nobreak\addvspace{1ex}\@afterheading}% to avoid a pagebreak after the heading

\RenewDocumentCommand{\subsection}{sm}{%
  \par\addvspace{1ex}%
  \phantomsection{}% reset the anchor for hyperrefs
  \addcontentsline{toc}{subsection}{#2}%
  \cvitem[0ex]{}{\strut\subsectionstyle{#2}}%
  \par\nobreak\addvspace{.5ex}\@afterheading}% to avoid a pagebreak after the heading

如果你将两者结合起来并进行所需的调整,最终会得到类似这样的结果。请注意,我的矩形略小一些,因为它的高度与条形图完全相同section

\documentclass{moderncv}
\usepackage{fontspec}
\firstname{Firstname}
\familyname{Surname}
\moderncvstyle{casual}
\moderncvcolor{blue}

\makeatletter
\RenewDocumentCommand{\subsection}{sm}{%
  \par\addvspace{1ex}%
  \phantomsection{}% reset the anchor for hyperrefs
  \addcontentsline{toc}{subsection}{#2}%
  \cvitem[0ex]{\strut\raggedleft\raisebox{0.3ex}{\color{color1}\rule{0.95ex}{0.95ex}}}{\strut\subsectionstyle{#2}}%
  \par\nobreak\addvspace{.5ex}\@afterheading}% to avoid a pagebreak after the heading
\makeatother

\begin{document}

\section{Section}
\subsection{Subsection}
\cvlistitem{Item}

\end{document}

输出:

现代简历

相关内容