.png)
Ich möchte einen Abschnittsbefehl (z. B. Unterabsatz) erstellen, der sich bei Befehlen mit leerem Titel anders verhält.
Dies ist mein MWE, das ungefähr zeigt, was ich erreichen möchte:
\documentclass{article}
\setcounter{secnumdepth}{7}
\makeatletter
\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%
{3.25ex \@plus1ex \@minus .2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\normalsize\bfseries}}
\makeatother
\begin{document}
\subparagraph{Subparagraph with title}
Some random text
\makeatletter
\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%
{3.25ex \@plus1ex \@minus .2ex}%
{-1em}%
{\normalfont\normalsize\bfseries}}
\makeatother
\subparagraph{} Some random text for subparagraph without title
\end{document}
Ich habe mir die Antwort auf diese Frage angesehen:\Abschnitt mit leerem Titel. Nummer neben dem ersten Absatz anzeigen
Es macht dasselbe, was ich möchte, aber kann ich ohne dasselbe Ergebnis erzielen titlesec
?
Antwort1
Soweit ich weiß, \subparagraph{}
ist dies nicht die normale Art, den LaTeX- \subparagraph
Befehl zu verwenden. Daher ist es möglicherweise eine gute Idee, Ihrem Befehl einen anderen Namen zu geben. Ich werde \subparagraph
trotzdem mit dem Namen antworten, da dies in der Frage gefragt wurde. Ich schlage zwei Methoden vor, die beide verwenden, xparse
um alle möglichen Argumente \subparagraph
(mit oder ohne Stern, mit oder ohne das optionale Argument in eckigen Klammern) einfach zu erfassen und zu analysieren.
Verwenden von xparse
und etoolbox
(„LaTeX2e-Stil“)
Diese Methode verwendet xparse
und etoolbox
. Darüber hinaus nutzt sie die Tatsache, dass \@startsection
das fünfte Argument von zwangsläufig erweitert wird, wenn TeX es verwendet. Wenn Sie möchten, dass ein leeres obligatorisches Argument Ihrer \subparagraph
genauso behandelt wird wie ein leeres, ersetzen Sie es einfach \ifstrempty
durch \ifblank
; dann haben \subparagraph{ }
und dasselbe Verhalten.\subparagraph{}
\documentclass{article}
\usepackage{xparse}
\usepackage{etoolbox}
\usepackage{lipsum}
\setcounter{secnumdepth}{7}
\makeatletter
\newcommand*{\alecheim@subparagraph}[1]{%
\@startsection{subparagraph}{5}{\parindent}%
{3.25ex \@plus1ex \@minus .2ex}%
% The following argument will be expanded during <glue> assignments
{\ifstrempty{#1}{-1em}{1.5ex \@plus .2ex}}
{\normalfont\normalsize\bfseries}%
}
\RenewDocumentCommand{\subparagraph}{sO{#3}m}{%
\IfBooleanTF{#1}
{\alecheim@subparagraph{#3}*{#3}}
{\alecheim@subparagraph{#3}[#2]{#3}}%
}
\makeatother
\begin{document}
\subparagraph{Subparagraph with title}
\lipsum[1][1-2]
\subparagraph{} Some random text for subparagraph without title.
\end{document}
Verwenden von xparse
und expl3
(„ expl3
Stil“)
Die folgende Methode verwendet Techniken aus expl3
, der Sprache aus dem LaTeX3-Projekt. Siekönnteverlässt sich aber nicht darauf, dass das fünfte Argument von \@startsection
irgendwann automatisch erweitert wird; stattdessen nehmen wir die erforderliche Erweiterung selbst in der folgenden Zeile vor, die das Ergebnis in speichert \l_tmpa_tl
:
\tl_set:Nx \l_tmpa_tl { \tl_if_empty:nTF {#3} { -1em } { 1.5ex \@plus .2ex } }
Dann verwenden wir einen V
Argumenttyp mit, \alecheim_subparagraph:V \l_tmpa_tl
um \alecheim_subparagraph:n
dieWertvon \l_tmpa_tl
. Hier ist das vollständige Beispiel:
\documentclass{article}
\usepackage{xparse}
\usepackage{lipsum}
\setcounter{secnumdepth}{7}
\makeatletter
\ExplSyntaxOn
\cs_new_protected:Npn \alecheim_subparagraph:n #1
{
\@startsection { subparagraph } { 5 } { \parindent }
{ 3.25ex \@plus 1ex \@minus .2ex }
{#1}
{ \normalfont \normalsize \bfseries }
}
\cs_generate_variant:Nn \alecheim_subparagraph:n { V }
\RenewDocumentCommand { \subparagraph } { s O{#3} m }
{
% You may want to replace \tl_if_empty:nTF with \tl_if_blank:nTF here.
\tl_set:Nx \l_tmpa_tl
{ \tl_if_empty:nTF {#3} { -1em } { 1.5ex \@plus .2ex } }
\IfBooleanTF {#1}
{ \alecheim_subparagraph:V \l_tmpa_tl * {#3} }
{ \alecheim_subparagraph:V \l_tmpa_tl [#2]{#3} }
}
\ExplSyntaxOff
\makeatother
\begin{document}
\subparagraph{Subparagraph with title}
\lipsum[1][1-2]
\subparagraph{} Some random text for subparagraph without title.
\end{document}
Die Ausgabe ist die gleiche wie oben.