Considerar
\documentclass{article}
\usepackage{titlesec}
\def\bl#1 #2 {#1\textsuperscript{#2}\,}
\titleformat{\section}[runin]{}{}{0pt}{}[. ]
%\titleformat{\section}[runin]{}{}{0pt}{\bl}[. ]
\begin{document}
\section{3 a 21}
main text.
\end{document}
La intención de la línea comentada era producir el equivalente de \section{\bl 3 a 21}
sin tener que escribir \bl para cada sección; pero produjo un error. ¿Se puede hacer algo para lograr el resultado deseado?
Respuesta1
Tienes que capturar el argumento antes de pasarlo a \bl
. A continuación lo capturamos usando \@bl
antes de pasarlo a \bl
:
\documentclass{article}
\usepackage{titlesec}
\makeatletter
\def\@bl#1{\bl#1}
\def\bl#1 #2 {#1\textsuperscript{#2}\,}
\titleformat{\section}[runin]{}{}{0pt}{\@bl}[. ]
\makeatother
\begin{document}
\section{3 a 21}
main text.
\end{document}
Respuesta2
Puedes hacerlo también sin ningún paquete. El truco es que el argumento to \section
se pasa como un grupo entre llaves a la parte final del código, de modo que si esa parte termina con una macro que toma un argumento, verá el título de la sección; pero primero debes quitar los frenillos. Tenga en cuenta que al definir la macro interna con tres argumentos podemos agregar fácilmente el período final.
\documentclass{article}
\usepackage{showframe}% just for the example
\makeatletter
\renewcommand{\section}{%
\@startsection{section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{-1em}%
{\normalfont\process@section@title}%
}
\newcommand{\process@section@title}[1]{\process@section@title@aux#1\@nil}
\def\process@section@title@aux#1 #2 #3\@nil{%
#1\textsuperscript{#2} #3.%
}
\makeatother
\setcounter{secnumdepth}{0}
\begin{document}
\section{3 a 21}
Some text for the section.
\section{4 a 42}
Some text for the section.
\end{document}