나는 내가 사용하는 언어와 각 언어의 레벨을 나열하고 싶은 이력서를 작성하고 있습니다. 레벨을 표시하기 위해 스킬 도트를 사용하고 싶습니다. 아래 이미지에 표시된 것과 유사한 구조를 얻고 싶습니다.
이를 위해 \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
하나의 언어를 설정하기 위해 구분되지 않은 두 개의 매크로 인수를 정확히 한 번 사용하지 않은 경우에도\cvlanguages
구분되지 않은 두 개의 매크로 인수를 사용하도록 정의됩니다. 이러한 상황은 -construct\cvlanguages
내에서 의 확장과 공허함 의 비교를 방해할 수 있습니다\ifthenelse
.
-mechanism을 사용하는 것이 좋습니다 \@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}