.png)
Quero fazer um comando de seccionamento (por exemplo, subparágrafo) que terá um comportamento diferente para comando com título vazio.
Este é o meu MWE, mostrando um pouco sobre o que desejo obter:
\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}
Eu olhei para a resposta para esta pergunta:\section com título vazio. Mostrar número próximo ao primeiro parágrafo
Ele faz a mesma coisa que eu quero, mas posso obter o mesmo resultado sem titlesec
?
Responder1
Pelo que eu sei, \subparagraph{}
não é a maneira normal de usar o comando do LaTeX \subparagraph
, então pode ser uma boa ideia dar um nome diferente ao seu comando. Vou responder com o \subparagraph
nome mesmo assim, pois é o que foi perguntado na pergunta. Proponho dois métodos, ambos usados xparse
para capturar e analisar facilmente todos os argumentos possíveis de \subparagraph
(com ou sem asterisco, com ou sem o argumento opcional entre colchetes).
Usando xparse
e etoolbox
(“estilo LaTeX2e”)
Este método usa xparse
e etoolbox
. Além disso, ele explora o fato de que o \@startsection
quinto argumento do será necessariamente expandido quando o TeX o utilizar. Se você deseja que um argumento obrigatório em branco \subparagraph
seja tratado da mesma maneira que um argumento vazio, basta substituir \ifstrempty
por \ifblank
; então, \subparagraph{ }
e \subparagraph{}
terá o mesmo comportamento.
\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
e expl3
(“ expl3
estilo”)
O método a seguir usa técnicas deexpl3
, a linguagem do projeto LaTeX3. Istopoderiamas não confia no fato de que o quinto argumento \@startsection
será automaticamente expandido em algum ponto; em vez disso, nós mesmos fazemos a expansão necessária na linha a seguir, que armazena o resultado em \l_tmpa_tl
:
\tl_set:Nx \l_tmpa_tl { \tl_if_empty:nTF {#3} { -1em } { 1.5ex \@plus .2ex } }
Então usamos um V
tipo de argumento with \alecheim_subparagraph:V \l_tmpa_tl
para passar\alecheim_subparagraph:n
ovalorde \l_tmpa_tl
. Aqui está o exemplo 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}
A saída é a mesma acima.