
No soy lo suficientemente competente en LaTeX para resolver lo siguiente. Tengo una macro que toma dos parámetros, crea un bonito cuadro, pone el primer argumento en negrita y el segundo argumento en un texto resaltado:
\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} }
Llamo a esta macro de 10 a 15 veces en texto (esa cantidad de pasos tengo). Para poder hacer referencia a la página donde se expande esta macro, ahora me gustaría colocar una etiqueta. Si cambio la última línea a:
\vspace*{1.1ex} \label{step:mode:#1} }
Los errores comienzan a aparecer. Entiendo esto, en una línea completamente ajena:
! Missing \endcsname inserted.
<to be read again>
\protect
l.160 ...aults Occur\relax }{figure.caption.52}{}}
Esta línea probablemente provenga de algún archivo auxiliar.
¿Cómo expandir adecuadamente el primer argumento y usarlo como argumento para etiquetar? El primer argumento no tiene espacios y nunca los tendrá.
Respuesta1
Puede redefinir \textsuperscript
mientras configura la etiqueta. Aquí \@firstofone
habría una buena redefinición. Este comando simplemente lee el argumento y lo usa tal como está.
También \csname phantomsection\endcsname
puede ser una buena idea tener enlaces que funcionen con el paquete 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}
Simplemente \csname phantomsection\endcsname
sería \relax
, si hyperref
no se usa, por lo que es casi nada.
Respuesta2
Yo lo haría de otra manera:
\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]}
De esta manera \fbox
quedará centrado en la línea y tendrá igual espacio antes y después (corrija los espacios, si no le gustan como están ahora).
Preste atención a que se permiten espacios en las etiquetas, pero no caracteres ni comandos acentuados. Así que \Step{R\textsuperscript{+}4.a}{blah, blah}
seguramente dará problemas. Puedes resolverlo diciendo
\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]}
y llamar a esta entrada problemática como
\Step[R+4.a]{R\textsuperscript{+}4.a}{blah, blah}
refiriéndose entonces a
\pageref{R+4.a}