我有这个代码:
\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}
输出: