我想画一条线那color1
用蓝色表示。在我的代码片段中,我使用由以下变量给出的变量moderncv 本身。
\documentclass[11pt,a4paper,sans]{moderncv}
\usepackage{fontenc}
\usepackage{graphicx}
\usepackage{xcolor}
\moderncvstyle{casual}
\moderncvcolor{blue}
\usepackage[scale=0.75]{geometry}
\name{John}{Doe}
\renewcommand*{\rule}[2]{\def\@rule{\color{color1}{#1}{#2}}}
\begin{document}
\makecvtitle
\hbox{
\hspace*{0.2\textwidth}
\rule{5pt}{\textwidth}
\hspace*{0.05\textwidth}
}
\end{document}
为什么这里不行?当我用它编译时,latexmk -xelatex $file
我只得到一个纯白色的网站,上面只有 John Doe 这个名字。
答案1
你在评论中提到的答案确实有
\renewcommand*{\opening}[1]{\def\@opening{{\color{color1}#1}}}
但情况完全不同。by 的\opening
定义moderncv
是
\newcommand*{\opening}[1]{\def\@opening{#1}}
这意味着参数\opening
被保存\@opening
以供以后使用。重新定义会将参数与所需的颜色设置一起保存。
的定义\rule
完全不同:
% latex.ltx, line 4984:
\DeclareRobustCommand\rule{\@ifnextchar[\@rule{\@rule[\z@]}}%
想象\DeclareRobustCommand
一下\newcommand
。定义的目的是检查是否[
遵循并将控制权传递给内部命令\@rule
。这两种情况之间有一个根本区别:\@opening
只是一个容器,\@rule
是一个带有参数的宏,负责生成规则。
相反,您试图重新定义\@rule
,但不幸的是,这是错误的。
你应该做的是定义一个新命令,因为\rule
它可能会在其他情况下使用(可能是在你不知情的情况下在内部使用)。
\newcommand{\colorrule}[3][0pt]{\textcolor{color1}{\rule[#1]{#2}{#3}}}
\colorrule
并在需要彩色规则的地方使用。
答案2
我认为这是有效的。
\documentclass[11pt,a4paper,sans]{moderncv}
\usepackage{fontenc}
\usepackage{graphicx}
\usepackage{xcolor}
\moderncvstyle{casual}
\moderncvcolor{blue}
\usepackage[scale=0.75]{geometry}
\name{John}{Doe}
\begin{document}
\parbox[b]{0.75\textwidth}{%
\hbox{\hspace*{0.2\textwidth}
\color{blue}
\rule{1pt}{\textheight}
\hspace*{0.05\textwidth}}}
\vskip-9in
\vtop{\makecvtitle \hspace{2in}Hello World}
\end{document}