我正在製作一份簡歷,我想在其中列出我所說的語言以及每種語言的水平。為了呈現等級,我希望使用技能點數。我想要得到類似下圖的結構
為此,我定義了一個\cvlanguages
在 .cls 檔案上命名的新命令:
\newcommand{\cvlanguages}[2]{\renewcommand{\cvlanguages}{#1 \grade{#2}}}
稍後在 .cls 程式碼中,為了列印履歷表上的「語言」部分,我使用以下程式碼:
\ifthenelse{\equal{\cvlanguages}{}}{}{
\profilesection{LANGUAGES}
{\cvlanguages}
}
\profilesection
在別處定義,在這裡並不重要。
該\grade
指令也在 .cls 檔案中,由以下方式給出:
\newcommand{\grade}[1]{
\begin{tikzpicture}
\clip (1em-.4em,-.35em) rectangle (5em +.5em ,1em);
\foreach \x in {1,2,...,5}{
\path[{fill=backColor}] (\x em,0) circle (.35em);
}
\begin{scope}
\clip (1em-.4em,-.35em) rectangle (#1 em +.5em ,1em);
\foreach \x in {1,2,...,5}{
\path[{fill=frontColor}] (\x em,0) circle (.35em);
}
\end{scope}
\end{tikzpicture}%
}
在 .tex 檔案上,我使用以下行來呼叫\cvlanguages
命令:
\cvlanguages{Portuguese}{5}
這個過程會導致致命錯誤,我不知道為什麼。該指令\grade
在嵌套\renewcommand
在\newcommand
.
我考慮過使用類似的替代解決方案:
\ifthenelse{\equal{\cvlanguages}{}}{}{
\profilesection{LANGUAGES}
{\fontsize{0.36cm}{0.432cm} \selectfont \cvlanguages{#1} \grade{\cvlanguages{#2}}}
}
\ifthenelse
但我不知道如何進行這項工作,因為使用“#”指定要列印的參數似乎在這個環境中不起作用。
我對這個級別的 LaTex 很陌生,並且花了一段時間試圖弄清楚這一點,但沒有成功。對於如何解決此問題的任何幫助,我將不勝感激。
答案1
最初\cvlanguages
定義為使用兩個非分隔巨集參數並重新定義自身。
這種重新定義可能會發生正好一次。
當這種重新定義發生時,then\cvlanguages
被重新定義為不使用任何巨集參數並擴展為類似短語“ Portugese \grade{5}
”,因此不再“可重新定義”。
這意味著:
您可以
\cvlanguages
只使用一次與兩個非分隔巨集參數來設定一種語言。
之後,您可以\cvlanguages
不使用巨集參數來列出該一種語言和技能點數。如果您沒有使用
\cvlanguages
兩個非分隔巨集參數來設定一種語言,那麼\cvlanguages
仍然定義為使用兩個非分隔巨集參數。這種情況可能/將會幹擾\cvlanguages
的擴展與 - 構造中的空性的比較\ifthenelse
。
我建議使用\@starttoc
- 機制:
在下面的範例中,巨集\cvlanguages
用於將語言和等級新增至 cv 語言清單中,並且巨集\listofcvlanguages
用於傳遞 cv 語言清單:
\documentclass{article}
\usepackage{tikz}
% As you didn't provide definitions for these, I invented something on my own:
\definecolor{frontColor}{named}{black}
\definecolor{backColor}{named}{lightgray}
\newcommand\profilesection[1]{%
\noindent\textsf{\textbf{#1}}\\\null\hrulefill\null\\%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\grade}[1]{%
\begin{tikzpicture}%
\clip (1em-.4em,-.35em) rectangle (5em +.5em ,1em);%
\foreach \x in {1,2,...,5}{%
\path[{fill=backColor}] (\x em,0) circle (.35em);%
}%
\begin{scope}%
\clip (1em-.4em,-.35em) rectangle (#1 em +.5em ,1em);%
\foreach \x in {1,2,...,5}{%
\path[{fill=frontColor}] (\x em,0) circle (.35em);%
}%
\end{scope}%
\end{tikzpicture}%
}%
\newcommand\cvlanguagesectionheading{%
\ifnum\cvlanguagecountmacro<1 \else
\ifnum\cvlanguagecountmacro<2 %
\profilesection{LANGUAGE}%
\else
\profilesection{LANGUAGES}%
\fi
\fi
}%
\newcommand\cvlanguagecountmacro{0}%
\newcommand\advancecvlanguagecountmacro{%
\xdef\cvlanguagecountmacro{%
\number\numexpr\cvlanguagecountmacro+1\relax
}%
}%
\newcommand\languageline[2]{%
\par\noindent#1\\\grade{#2}\par%
}%
\makeatletter
\newcommand{\cvlanguages}[2]{%
\protected@write{\@mainaux}{}{%
\string\advancecvlanguagecountmacro
}%
\addtocontents{cvl}{\string\languageline{#1}{#2}}%
}%
\newcommand\listofcvlanguages{%
\cvlanguagesectionheading
\@starttoc{cvl}%
}%
\makeatother
\begin{document}
Some text.
\listofcvlanguages
\cvlanguages{Portugese}{5}
\cvlanguages{English}{5}
\cvlanguages{WeirdSpeech}{2}
\cvlanguages{OddTongue}{1}
\end{document}