Расширение? Грязные трюки?

Расширение? Грязные трюки?

Учитывать

\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}

Целью закомментированной строки было создание эквивалента \section{\bl 3 a 21}без необходимости вводить \bl для каждого раздела; но это привело к ошибке. Можно ли что-то сделать, чтобы достичь желаемого результата?

решение1

Вам необходимо захватить аргумент перед передачей его в \bl. Ниже мы захватываем его с помощью \@blперед передачей его в \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}

решение2

Вы можете сделать это и без пакета. Хитрость в том, что аргумент \sectionпередается в качестве группы в фигурных скобках в последнюю часть кода, поэтому если эта часть заканчивается макросом, принимающим аргумент, он увидит заголовок раздела; но сначала вам нужно удалить фигурные скобки. Обратите внимание, что, определяя внутренний макрос с тремя аргументами, мы можем легко добавить последнюю точку.

\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}

введите описание изображения здесь

решение3

Это можно квалифицировать как «грязное»:

\documentclass{article}
\usepackage{titlesec}

\def\bl#1 #2 {#1\textsuperscript{#2}\,}
\titleformat{\section}[runin]{}{}{0pt}{}[. ]
\let\oldsect=\section
\def\section#1{\oldsect{\bl#1}}
\begin{document}
\section{3 a 21}
main text.
\end{document}

3а 21. основной текст.

Связанный контент