Convirtiendo "sección" en "\sección" para pasar al comando titleformat

Convirtiendo "sección" en "\sección" para pasar al comando titleformat

El \titleformatcomando del titlesecpaquete se invoca de la siguiente manera:

\titleformat{\section}{<a few formatting options>}
\titleformat{\subsection}{<a few formatting options>}

Estoy escribiendo un pequeño paquete para automatizar algunos formatos, incluido el formato de los títulos de las secciones, y titleseces uno de los paquetes que estoy "preparando". El problema es que me gustaría que mi código se escribiera de la siguiente forma

\sectionfamily{section}{uppercase}
\sectionfamily{subsection}{italic}

Aquí \sectionfamilyestá mi comando personalizado que, como parte de su ejecución, eventualmente llamará \titleformat. Supongamos, por el bien de la pregunta, que se define como:

\newcommand{\sectionfamily}[2]{   
    \titleformat{\#1}{\itshape}{\thesection}{0pt}{}[]
}

Como puede ver, estoy intentando convertir \sectionfamily{section}{...}a \titleformat{\section}{...}, pero la forma en que lo defino aquí no funciona. Probé muchas combinaciones de \expandafter, \csnameetc., pero tampoco pude lograr que ninguna de esas combinaciones funcionara. También falló al realizar un comando de alias y pasar el alias.

¿Alguien sabe alguna forma de sectionconvertirlo \sectiony hacerlo funcionar?


Nota: el comando \titleformat{\section}{\itshape}{\thesection}{0pt}{}[]funciona y se puede utilizar para probar cosas. El MWE completo (¡o el ejemplo mínimo que no funciona!) es

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

Respuesta1

Deben haber dos \expandafterdeclaraciones. El primero para generar la secuencia de comandos y luego para \titleformatexpandirla en la configuración interna (sin embargo, no he examinado el paquete)

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

ingrese la descripción de la imagen aquí

Respuesta2

Uso expl3(cargado por 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}

Puede agregar otras palabras clave según los ejemplos proporcionados. Sin embargo, no creo que se gane demasiado con esta “automatización”.

ingrese la descripción de la imagen aquí

información relacionada