매크로 인수를 기반으로 라벨 생성

매크로 인수를 기반으로 라벨 생성

나는 다음 문제를 해결할 만큼 LaTeX에 능숙하지 않습니다. 두 개의 매개변수를 사용하여 멋진 상자를 만들고 첫 번째 인수를 굵게 표시하고 두 번째 인수를 강조된 텍스트로 표시하는 매크로가 있습니다.

\newcommand{\Step}[2]{%
\noindent{\\[0pt] \rule{0pt}{0.5ex}%
\hspace*{1em}\fbox{\parbox[t]{0.92\columnwidth}{{\bfseries Step #1.\ }\emph{#2}}}}
    \vspace*{1.1ex} }

나는 이 매크로를 텍스트에서 10-15번 호출합니다(이만큼 많은 단계가 있습니다). 이 매크로가 확장된 페이지를 참조할 수 있도록 라벨을 붙이고 싶습니다. 마지막 줄을 다음과 같이 변경하면:

    \vspace*{1.1ex} \label{step:mode:#1} }

오류가 나타나기 시작합니다. 나는 전혀 관련이 없는 줄에서 이것을 얻습니다.

! Missing \endcsname inserted.
<to be read again> 
               \protect 
l.160 ...aults Occur\relax }{figure.caption.52}{}}

이 줄은 아마도 일부 보조 파일에서 나온 것 같습니다.

첫 번째 인수를 올바르게 확장하고 레이블을 지정할 인수로 사용하는 방법은 무엇입니까? 첫 번째 인수에는 공백이 없으며 앞으로도 공백이 없습니다.

답변1

\textsuperscript레이블을 설정하는 동안 재정의할 수 있습니다 . 여기에 \@firstofone좋은 재정의가 있을 것입니다. 이 명령은 단순히 인수를 읽고 있는 그대로 사용합니다.

추가 \csname phantomsection\endcsname로 패키지와 작업 링크를 갖는 것도 좋은 생각일 수 있습니다 hyperref.

\documentclass{article}
\usepackage{lipsum}% for demonstration only
\usepackage{hyperref}% to show, that this works

\makeatletter
\newcommand{\Step}[2]{%
  \par\noindent{\rule{0pt}{0.5ex}%
    \csname phantomsection\endcsname
    {\let\textsuperscript\@firstofone\label{#1}}%
    \hspace*{1em}\fbox{\parbox[t]{\dimexpr \linewidth-2em-2\fboxsep-2\fboxrule\relax}{%
        {\bfseries Step #1.\ }\emph{#2}}}}\par
  \vspace*{1.1ex} 
}
\makeatother

\begin{document}
\Step{R\textsuperscript{+}4.a}{blah, blah}
See R\textsuperscript{+}4.b on page \pageref{R+4.b}.
\lipsum

\Step{R\textsuperscript{+}4.b}{blah, blah}
See R\textsuperscript{+}4.a on page \pageref{R+4.a}.
\lipsum

\end{document}

\csname phantomsection\endcsname가 사용 되지 않으면 단순히 \relax이므로 거의 hyperref아무것도 아닙니다.

답변2

나는 다른 방식으로 할 것입니다 :

\usepackage{calc}
\newcommand{\Step}[2]{%
  \par\addvspace{1.1ex}
\noindent\hspace*{1em}\fbox{\parbox[t]{\columnwidth-2em-2\fboxsep-2\fboxrule}
  {\textbf{Step #1.}\ \emph{#2}}}\label{step:mode:#1}\\*[1.1ex]}

이런 방식으로 은 \fbox선의 중앙에 배치되고 그 전후에 동일한 공간을 갖게 됩니다(지금처럼 간격이 마음에 들지 않으면 간격을 수정하십시오).

레이블에는 공백이 허용되지만 악센트 문자나 명령은 허용되지 않습니다. 그러면 \Step{R\textsuperscript{+}4.a}{blah, blah}반드시 문제가 생길 것입니다. 라고 하면 해결이 됩니다

\newcommand{\Step}[3]{%
  \par\addvspace{1.1ex}
\noindent\hspace*{1em}\fbox{\parbox[t]{\columnwidth-2em-2\fboxsep-2\fboxrule}
  {\textbf{Step #2.}\ \emph{#3}}}\label{step:mode:#1}\\*[1.1ex]}

이 문제가 있는 항목을 다음과 같이 호출합니다.

\Step[R+4.a]{R\textsuperscript{+}4.a}{blah, blah}

그때를 언급해

\pageref{R+4.a}

관련 정보