Я составляю резюме, в котором я хотел бы перечислить языки, на которых я говорю, и мой уровень в каждом из них. Для представления уровней я хочу использовать точки навыков. Я хочу получить структуру, похожую на ту, что показана на изображении ниже
Для этого я определил новую команду с именем \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
определено, чтобы потреблять два неразделенных макроаргумента и переопределять себя.
Это переопределение может произойтировно один раз.
Когда происходит это переопределение, то \cvlanguages
переопределяется так, чтобы не потреблять никаких макроаргументов и расширяться до чего-то вроде фразы " Portugese \grade{5}
" и, таким образом, больше не является "переопределяемым".
Это означает:
Вы можете использовать
\cvlanguages
только один раз с двумя неразделенными макроаргументами для установки одного языка.
После этого вы можете использовать\cvlanguages
без макроаргументов для перечисления этого одного языка и точек навыков.Если вы не использовали
\cvlanguages
exact once с двумя неразделенными макроаргументами для установки одного языка, то\cvlanguages
все равно определено, что потребляет два неразделенных макроаргумента. Это обстоятельство может/будет мешать сравнению\cvlanguages
расширения ' с пустотой внутри\ifthenelse
-конструкции.
Я предлагаю использовать \@starttoc
-механизм:
В приведенном ниже примере макрос \cvlanguages
используется для добавления языка и оценки в список cvlanguages, а также макрос \listofcvlanguages
используется для предоставления списка cvlanguages:
\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}