更新:

更新:

我正在使用moderncv具有classic样式的文档类型并尝试创建类似于\cventry所述新命令这里。我试图消除末尾出现的句点,只保留年份、标题和说明。我知道我可以将不需要的字段留空,但我认为弄清楚这一点可能是一个很好的教训。我重命名了所有有的内容cventry,但我可以重复使用任何内容吗?我试图在序言中定义如下:

\newcommand*{\cvthing}[4][.25em]{%
    \savebox{\cvthingyearbox}{%
        \hspace*{2\separatorcolumnwidth}%
        \hintstyle{#2}}%
    \setlength{\cvthingtitleboxwidth}{\widthof{\usebox{\cvthingyearbox}}}%
    \setlength{\cvthingtitleboxwidth}{\maincolumnwidth-\cvthingtitleboxwidth}%
    \begin{minipage}{\maincolumnwidth}%
        \parbox[t]{\cvthingtitleboxwidth}{%
            \strut%
            {\bfseries#3}%
            {\strut}%
        \usebox{\cvthingyearbox}%
    \end{minipage}%
    \ifx&#4&%
    \else{%
        \newline{}%
        \begin{minipage}[t]{\maincolumnwidth}%
            \small%
            #4%
    \end{minipage}}\fi%
    \par\addvspace{#1}}

但我收到这些错误:

File ended while scanning use of \@xargdef.
You have requested package `moderncvheadi', but the package provides `moderncvheadi'.
You have requested package `moderncvbodyi', but the package provides `moderncvbodyi'.

我已经使用 LaTeX 几年了,但还没有尝试做出太大的改变。有人能解释一下我做错了什么吗?

答案1

在您给出的代码片段中存在几个问题,有些我可以纠正,有些则不能,因为您没有告诉我们您想要存档的内容。我将其用于\cvtest以下备注和下面的 mwe...

  • 要使用新盒子你需要初始化它:\@initializebox{\cvtestyearbox}
  • 要使用新的长度,您必须定义它:\newlength{\cvtesttitleboxwidth}
  • 因为我们必须使用,所以\@initializebox我们需要使用\makeatletter\makeatother
  • 您的某些括号位置不正确。例如:您不能打开一个括号\parbox并在其内部关闭一个括号,在...minipage之前打开...\parbox

更新:

因为你现在提供了更多信息,所以我删除了之前猜测的代码。请参阅下面的 MWE 和正确的工作代码。

这里的主要问题是误解,因为您使用的代码不是为 构建的\moderncvstyle{classic},而是为 构建的\moderncvstyle{casual}

因此,代码为\cvtest(请查看新名称!):

\makeatletter
\@initializebox{\cvtestyearbox} % <====================================
\newlength{\cvtesttitleboxwidth} % <===================================
\newcommand*{\cvtest}[4][.25em]{%
  \savebox{\cvtestyearbox}{%
    \hspace*{2\separatorcolumnwidth}%
    \hintstyle{#2}}%
  \setlength{\cvtesttitleboxwidth}{\widthof{\usebox{\cvtestyearbox}}}%
  \setlength{\cvtesttitleboxwidth}{\maincolumnwidth-\cvtesttitleboxwidth}%
  \begin{minipage}{\maincolumnwidth}%
    \parbox[t]{\cvtesttitleboxwidth}{%
      \strut%
      {\bfseries#3}%
      \strut}%
    \usebox{\cvtestyearbox}%
  \end{minipage}%
  \ifx&#4&%
    \else{%
      \newline{}%
      \begin{minipage}[t]{\maincolumnwidth}%
        \small%
        #4%
      \end{minipage}}\fi%
  \par\addvspace{#1}}
\makeatother

现在可以编译,但结果错误:

错误的结果

为了使\cvthing命令以如下样式可用,您需要从以下样式classic的定义开始:cventry

\renewcommand*{\cventry}[7][.25em]{%
  \cvitem[#1]{#2}{%
    {\bfseries#3}%
    \ifthenelse{\equal{#4}{}}{}{, {\slshape#4}}%
    \ifthenelse{\equal{#5}{}}{}{, #5}%
    \ifthenelse{\equal{#6}{}}{}{, #6}%
    .\strut%
    \ifx&#7&%
    \else{\newline{}\begin{minipage}[t]{\linewidth}\small#7\end{minipage}}\fi}}

现在我们可以将其改为:

%\cvthing{year--year}{title}{description} % <===========================
\newcommand*{\cvthing}[4][.25em]{%
  \cvitem[#1]{#2}{%
    {\bfseries#3}%
    \strut%
    \ifx&#4&%
    \else{\newline{}\begin{minipage}[t]{\linewidth}\small#4\end{minipage}}\fi}}

最后我们得到以下完整代码

\documentclass[11pt,a4paper,sans]{moderncv}

% moderncv themes
\moderncvstyle{classic} % casual, classic, banking, oldstyle and fancy
\moderncvcolor{blue} 

\usepackage[utf8]{inputenc}
\usepackage[scale=0.75]{geometry}

%\cvthing{year--year}{title}{description} % <===========================
\newcommand*{\cvthing}[4][.25em]{%
  \cvitem[#1]{#2}{%
    {\bfseries#3}%
    \strut%
    \ifx&#4&%
    \else{\newline{}\begin{minipage}[t]{\linewidth}\small#4\end{minipage}}\fi}}

\makeatletter
\@initializebox{\cvtestyearbox} % <====================================
\newlength{\cvtesttitleboxwidth} % <===================================
%\cvtest{year--year}{title}{description} % <===========================
\newcommand*{\cvtest}[4][.25em]{%
  \savebox{\cvtestyearbox}{%
    \hspace*{2\separatorcolumnwidth}%
    \hintstyle{#2}}%
  \setlength{\cvtesttitleboxwidth}{\widthof{\usebox{\cvtestyearbox}}}%
  \setlength{\cvtesttitleboxwidth}{\maincolumnwidth-\cvtesttitleboxwidth}%
  \begin{minipage}{\maincolumnwidth}%
    \parbox[t]{\cvtesttitleboxwidth}{%
      \strut%
      {\bfseries#3}%
      \strut}%
    \usebox{\cvtestyearbox}%
  \end{minipage}%
  \ifx&#4&%
    \else{%
      \newline{}%
      \begin{minipage}[t]{\maincolumnwidth}%
        \small%
        #4%
      \end{minipage}}\fi%
  \par\addvspace{#1}}
\makeatother


% personal data
\name{John}{Doe}
\title{Resumé title}
\address{street and number}{postcode city}{country}
\phone[mobile]{+1~(234)~567~890}
\phone[fixed]{+2~(345)~678~901}
\phone[fax]{+3~(456)~789~012}
\email{[email protected]}
\homepage{www.johndoe.com}
\social[linkedin]{john.doe}
\social[twitter]{jdoe}
\social[github]{jdoe}
\extrainfo{additional information}
\photo[64pt][0.4pt]{example-image-a}
\quote{Some quote}

\setlength{\footskip}{66pt}


\begin{document}

\makecvtitle

\section{Education}
\cventry{year--year}{Degree}{Institution--3}{City--4}{\textit{Grade}--5}{Description--6}  % arguments 3 to 6 can be left empty
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description}

\cvthing{year--year}{Degree}{Institution}% <============================

\cvtest{year--year}{Degree}{Institution}% <=============================

\section{Master thesis}
\cvitem{title}{\emph{Title}}
\cvitem{supervisors}{Supervisors}
\cvitem{description}{Short thesis abstract}

\end{document}

结果如下(请注意,\cvtest样式不正确classic!):

结果

相关内容