.png)
Quiero crear un comando de sección (por ejemplo, subpárrafo) que tendrá un comportamiento diferente al comando con título vacío.
Este es mi MWE, mostrando algo de lo que quiero obtener:
\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}
Miré la respuesta a esta pregunta:\sección con título vacío. Mostrar número junto al primer párrafo
Hace lo mismo que quiero, pero ¿puedo obtener el mismo resultado sin titlesec
?
Respuesta1
Hasta donde yo sé, \subparagraph{}
no es la forma normal de usar el comando de LaTeX \subparagraph
, por lo que puede ser una buena idea darle un nombre diferente al comando. Voy a responder con el \subparagraph
nombre de todos modos, ya que es lo que se preguntó en la pregunta. Propongo dos métodos, ambos utilizados xparse
para capturar y analizar fácilmente todos los argumentos posibles de \subparagraph
(con o sin asterisco, con o sin el argumento opcional entre corchetes).
Usando xparse
y etoolbox
(“estilo LaTeX2e”)
Este método utiliza xparse
y etoolbox
. Además, explota el hecho de que \@startsection
el quinto argumento de necesariamente se ampliará cuando TeX lo utilice. Si desea que un argumento obligatorio en blanco se \subparagraph
maneje de la misma manera que uno vacío, simplemente reemplácelo \ifstrempty
con \ifblank
; entonces, \subparagraph{ }
y \subparagraph{}
tendrá el mismo comportamiento.
\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}
Usando xparse
y expl3
(“ expl3
estilo”)
El siguiente método utiliza técnicas de expl3
, el lenguaje del proyecto LaTeX3. Élpodríapero no se basa en el hecho de que el quinto argumento de \@startsection
se ampliará automáticamente en algún momento; en su lugar, hacemos nosotros mismos la expansión requerida en la siguiente línea, que almacena el resultado en \l_tmpa_tl
:
\tl_set:Nx \l_tmpa_tl { \tl_if_empty:nTF {#3} { -1em } { 1.5ex \@plus .2ex } }
Luego usamos un V
tipo de argumento con \alecheim_subparagraph:V \l_tmpa_tl
para pasar \alecheim_subparagraph:n
elvalorde \l_tmpa_tl
. Aquí está el ejemplo completo:
\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}
El resultado es el mismo que el anterior.