Por que \shorthandon e \shorthandoff não podem ser incorporados em outras macros?

Por que \shorthandon e \shorthandoff não podem ser incorporados em outras macros?

A macro circundante \titlecom \shorthandon{;:!?}e \shorthandoff{;:!?}fornece o resultado esperado com o idioma babelde french(espaço adicionado antes de '?', '!', ':' e ';'):

\documentclass[french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
%
\shorthandon{;:!?}%
\title{La crise? Quelle crise?}
\shorthandoff{;:!?}%
%
\begin{document}
\maketitle
\end{document}

Mas isso não funciona se \shorthandone \shorthandoffestiverem incorporados (uma redefinição) na \titlemacro:

\documentclass[french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
%
\let\titleORI\title
\renewcommand{\title}[1]{%
  \shorthandon{;:!?}%
  \titleORI{#1}%
  \shorthandoff{;:!?}%
}
%
\title{La crise? Quelle crise?}
\author{Un auteur? Deux auteurs!}
%
\begin{document}
\maketitle
\end{document}

Qual é a razão disso? Existe uma solução alternativa?

Responder1

Dizer \shorthandon{?}forma ?um personagem ativo. Então, quando o argumento to \titlefor absorvido, no primeiro exemplo, ele estará ativo e, em \maketitle, o LaTeX usará a definição atual para ele, que passa a ser aquela definida por babel-french.

Pelo contrário, no segundo caso o \shorthandoncomando é executado quando o argumento to \titlejá foi absorvido, portanto ?não está ativo e assim permanecerá para sempre (no texto substituto de \@title, que é a macro onde \titlearmazena o título).

Você tem que atrasar a leitura do argumento depois de \shorthandonexecutado.

\documentclass[french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}

\let\ORItitle\title
\renewcommand{\title}{%
  \shorthandon{;:!?}%
  \titlewithshorthand
}
\newcommand{\titlewithshorthand}[1]{%
  \ORItitle{#1}%
  \shorthandoff{;:!?}%
}

\title{La crise? Quelle crise?}

\begin{document}
\maketitle
\end{document}

Mas eu simplesmente colocaria \titleafter \begin{document}.

informação relacionada