글꼴 크기 및 스타일에 대한 NewDocumentCommand

글꼴 크기 및 스타일에 대한 NewDocumentCommand

NewDocumentCommand글꼴 색상(파란색, 빨간색), 글꼴 크기(12pt, 18pt, 크게, 크게), 글꼴 스타일(굵게, 기울임꼴, 굵은+기울임꼴)과 같은 선택적 인수를 사용하는 을 만들고 싶습니다 .볼드체 및 이탤릭체와 같은 키워드 옵션을 설정하는 방법은 무엇입니까?

@egreg의 답변을 바탕으로 다음 코드를 구성했습니다.338364/xparse-processor-with-multiple-arguments. xcolor 패키지의 색상 키워드와 pt의 글꼴 크기를 사용하여 색상과 글꼴 크기를 작동시킬 수 있었지만 글꼴 스타일에 대한 선택적 키워드를 설정하는 최선의 방법을 잘 모르겠습니다(예: 굵은 글씨의 경우 bf, 이탤릭체로 표시됩니다). 아마도 로 조건을 정할 생각이지만 \IfValueT실험하기 전에 조언을 환영합니다. 당연히 이 명령이 수학을 사용하고 색상을 지정할 수 있다면 좋을 것입니다. 그러나 그것이 너무 욕심스럽다면 텍스트와 함께 작동하는 명령으로 만족하겠습니다.

\documentclass{article}
\usepackage{xparse,xcolor}
\usepackage{verbatim}

\ExplSyntaxOn

\keys_define:nn { mystyle }
{
  color .tl_set:N = \l__mystyle_color_tl,
  size  .tl_set:N = \l__mystyle_size_tl,
  skip  .tl_set:N = \l__mystyle_skip_tl,
  color .initial:n = red,
  size  .initial:n = 12pt,
  skip  .initial:n = 14.5pt,
}
\NewDocumentCommand{\stress}{O{}m}
{
  \group_begin:
  \keys_set:nn { mystyle } { #1 }
  \clist_map_inline:nn { #2 }
  {
    \mystyle:VVVn
    \l__mystyle_color_tl
    \l__mystyle_size_tl
    \l__mystyle_skip_tl
    {##1}
  }
  \group_end:
}
\cs_new_protected:Nn \mystyle:nnnn
{
  \color{#1}\fontsize{#2}{#3}\selectfont#4
}
\cs_generate_variant:Nn \mystyle:nnnn { VVV }
\ExplSyntaxOff

\begin{document}

\stress{emphasize this sentence with default values}

\stress[color=green,size=18pt]{emphasize this sentence with custom values}

\stress[color=blue,size=10pt,skip=50pt]{\textit{emphasize this sentence with custom values}}

Could I modify the command to:

\verb|\stress[style=it]{blabla}| to select italic, 

\verb|\stress[style=bf]{blabla}| to select bold,

\verb|\stress[style=bfit]{blabla}| to select bold+italic

or even \verb|\stress[style=bf+it]{blabla}| to combine styles...

\end{document}

(skip 인수는 작동하지 않는 것 같지만 자신이 무엇을 하고 있는지 아는 사람에게는 쉬운 수정일 것이라고 생각합니다! 어쩌면 일종의 휴가 모드가 누락되었을 수도 있습니다...)

여기에 이미지 설명을 입력하세요

답변1

키 를 정의하고 싶습니다 .choice:.

\RequirePackage{fix-cm}
\documentclass{article}
\usepackage{xcolor}
\usepackage{verbatim}

\ExplSyntaxOn

\tl_new:N \l__mystyle_style_tl

\keys_define:nn { mystyle }
 {
  color .tl_set:N = \l__mystyle_color_tl,
  size  .tl_set:N = \l__mystyle_size_tl,
  skip  .tl_set:N = \l__mystyle_skip_tl,

  style .choice:,
  style/it .code:n = \tl_set:Nn \l__mystyle_style_tl { \itshape },
  style/bf .code:n = \tl_set:Nn \l__mystyle_style_tl { \bfseries },
  style/bfit .code:n = \tl_set:Nn \l__mystyle_style_tl { \bfseries\itshape },
  style/unknown .code:n = \tl_set:Nn \l__mystyle_style_tl { #1 },

  color .initial:n = red!75,
  size  .initial:n = 12pt,
  skip  .initial:n = 14.5pt,
 }
\NewDocumentCommand{\stress}{O{}m}
 {
  \group_begin:
  \keys_set:nn { mystyle } { #1 }
  \mystyle:VVVVn
    \l__mystyle_color_tl
    \l__mystyle_size_tl
    \l__mystyle_skip_tl
    \l__mystyle_style_tl
    {#2}
  \group_end:
 }
\cs_new_protected:Nn \mystyle:nnnnn
 {
  \leavevmode\color{#1}\fontsize{#2}{#3}#4\selectfont#5
 }
\cs_generate_variant:Nn \mystyle:nnnnn { VVVV }

\ExplSyntaxOff

\begin{document}

\stress{emphasize this sentence with default values}

\stress[color=green!60!red,size=18pt]{emphasize this sentence with custom values}

\stress[color=blue!80,size=10pt,skip=50pt,style=it]{emphasize this sentence with custom values}

\stress[style=it]{blabla}

\stress[style=bf]{blabla}

\stress[style=bfit]{blabla}

\stress[style=\scshape]{blabla}

\end{document}

가능한 조합을 미리 정의해야 하지만 일반적인 글꼴 명령으로 표현되는 다른 스타일에 대해서도 작업을 수행하는 것이 가능합니다.

원치 않는 효과를 피하기 위해 \leavevmodebefore 를 추가했습니다 .\color

여기에 이미지 설명을 입력하세요

관련 정보