In Betracht ziehen
\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}
Die auskommentierte Zeile sollte das Äquivalent von erzeugen, \section{\bl 3 a 21}
ohne dass für jeden Abschnitt \bl eingegeben werden muss. Allerdings trat ein Fehler auf. Kann etwas getan werden, um das gewünschte Ergebnis zu erzielen?
Antwort1
Sie müssen das Argument erfassen, bevor Sie es an weitergeben \bl
. Im Folgenden erfassen wir es mit , \@bl
bevor wir es an weitergeben \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}
Antwort2
Sie können es auch ohne Paket tun. Der Trick besteht darin, dass das Argument \section
als geschweifte Gruppe an den letzten Teil des Codes übergeben wird. Wenn dieser Teil also mit einem Makro endet, das ein Argument annimmt, wird der Abschnittstitel angezeigt. Sie müssen jedoch zuerst die Klammern entfernen. Beachten Sie, dass wir beim Definieren des inneren Makros mit drei Argumenten problemlos den letzten Punkt hinzufügen können.
\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}