
Der \titleformat
Befehl des titlesec
Pakets wird folgendermaßen aufgerufen:
\titleformat{\section}{<a few formatting options>}
\titleformat{\subsection}{<a few formatting options>}
Ich schreibe ein kleines Paket, um einige Formatierungen zu automatisieren, einschließlich der Formatierung von Abschnittstiteln, und dies titlesec
ist eines der Pakete, die ich „umpacke“. Das Problem ist, dass ich meinen Code gerne in der folgenden Form geschrieben hätte
\sectionfamily{section}{uppercase}
\sectionfamily{subsection}{italic}
Hier \sectionfamily
ist mein benutzerdefinierter Befehl, der im Rahmen seiner Ausführung schließlich aufruft \titleformat
. Nehmen wir der Frage zuliebe an, dass er wie folgt definiert ist:
\newcommand{\sectionfamily}[2]{
\titleformat{\#1}{\itshape}{\thesection}{0pt}{}[]
}
Wie Sie sehen, versuche ich, \sectionfamily{section}{...}
in zu konvertieren \titleformat{\section}{...}
, aber die Art, wie ich es hier definiere, funktioniert nicht. Ich habe viele Kombinationen von usw. ausprobiert \expandafter
, \csname
aber keine dieser Kombinationen hat funktioniert. Das Erstellen eines Alias-Befehls und die Übergabe des Alias schlugen ebenfalls fehl.
Kennt jemand eine Möglichkeit, dies section
umzuwandeln \section
und zum Laufen zu bringen?
Hinweis: Der Befehl \titleformat{\section}{\itshape}{\thesection}{0pt}{}[]
funktioniert und kann zum Ausprobieren verwendet werden. Das vollständige MWE (oder minimales, nicht funktionierendes Beispiel!!) ist
\documentclass[11pt,oneside,a4paper]{article}
\usepackage{titlesec}
\begin{document}
\section{How does this look?}
\newcommand{\sectionfamily}[2]{
\titleformat{\#1}{\itshape}{\thesection}{0pt}{}[]
}
\sectionfamily{section}{italic}
%What I want to run:
%\titleformat{\section}{\itshape}{\thesection}{0pt}{}[]
\section{How does this look?}
\end{document}
Antwort1
Es müssen zwei \expandafter
Anweisungen vorhanden sein. Die erste zum Generieren der Befehlssequenz und dann zum \titleformat
Expandieren im internen Setup (ich habe mir das Paket jedoch nicht angesehen).
\documentclass[11pt,oneside,a4paper]{article}
\usepackage{titlesec}
\newcommand{\sectionfamily}[2]{%
\expandafter\titleformat\expandafter{\csname #1\endcsname}{\itshape}{\csname the#1\endcsname~}{0pt}{}[]
}
\sectionfamily{section}{italic}
\sectionfamily{subsection}{italic}
\begin{document}
\section{How does this look?}
%\newcommand{\sectionfamily}[2]{
% \titleformat{\#1}{\itshape}{\thesection}{0pt}{}[]
%}
%What I want to run:
%\titleformat{\section}{\itshape}{\thesection~}{0pt}{}[]
\section{How does this look?}
\subsection{Happy?}
\end{document}
Antwort2
Verwendung expl3
(geladen von xparse
):
\documentclass[11pt,oneside,a4paper]{article}
\usepackage{titlesec}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\sectionfamily}{mm}
{
\fennell_section_family:nn { #1 } { #2 }
}
\cs_new_protected:Npn \fennell_section_family:nn #1 #2
{
\tl_clear:N \l_fennell_section_font_tl
\tl_clear:N \l_fennell_section_format_tl
\str_case:nn { #2 }
{
{ italic } { \tl_set:Nn \l_fennell_section_font_tl { \itshape } }
{ uppercase } { \tl_set:Nn \l_fennell_section_format_tl { \MakeUppercase } }
}
\use:x
{
\exp_not:N \titleformat
{ \exp_not:c { #1 } }
{ \exp_not:V \l_fennell_section_font_tl }
{ \exp_not:c { the#1 } }
{ 1em }
{ \exp_not:V \l_fennell_section_format_tl }
}
}
\ExplSyntaxOff
\sectionfamily{section}{uppercase}
\sectionfamily{subsection}{italic}
\begin{document}
\section{How does this look?}
\subsection{How does this look?}
\end{document}
Du kannst anhand der angegebenen Beispiele weitere Schlüsselwörter hinzufügen. Ich glaube allerdings nicht, dass du mit dieser „Automatisierung“ viel gewinnst.