Warum können \shorthandon und \shorthandoff nicht in andere Makros eingebettet werden?

Warum können \shorthandon und \shorthandoff nicht in andere Makros eingebettet werden?

Das Umgeben \titledes Makros mit \shorthandon{;:!?}und \shorthandoff{;:!?}führt zum erwarteten Ergebnis mit der Sprache babelvon french(Leerzeichen vor '?', '!', ':' und ';'):

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

Dies funktioniert jedoch nicht, wenn \shorthandonund \shorthandoffin das Makro (oder eine Neudefinition davon) eingebettet sind \title:

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

Was ist der Grund dafür? Gibt es eine Problemumgehung?

Antwort1

Das Sagen \shorthandon{?}erzeugt ?ein aktives Zeichen. Wenn also das Argument in \titleabsorbiert wird, ist es im ersten Beispiel aktiv und \maketitleLaTeX verwendet bei die aktuelle Definition dafür, die zufällig die von definierte ist babel-french.

Im Gegensatz dazu wird im zweiten Fall der \shorthandonBefehl ausgeführt, wenn das Argument \titlebereits absorbiert wurde, also ?nicht aktiv ist und als solcher für immer bestehen bleibt (im Ersetzungstext von \@title, dem Makro, in dem \titleder Titel gespeichert wird).

Sie müssen das Lesen des Arguments nach \shorthandonder Ausführung verzögern.

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

Aber ich würde einfach \titlenach platzieren \begin{document}.

verwandte Informationen