![Warum können \shorthandon und \shorthandoff nicht in andere Makros eingebettet werden?](https://rvso.com/image/286988/Warum%20k%C3%B6nnen%20%5Cshorthandon%20und%20%5Cshorthandoff%20nicht%20in%20andere%20Makros%20eingebettet%20werden%3F.png)
Das Umgeben \title
des Makros mit \shorthandon{;:!?}
und \shorthandoff{;:!?}
führt zum erwarteten Ergebnis mit der Sprache babel
von 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 \shorthandon
und \shorthandoff
in 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 \title
absorbiert wird, ist es im ersten Beispiel aktiv und \maketitle
LaTeX verwendet bei die aktuelle Definition dafür, die zufällig die von definierte ist babel-french
.
Im Gegensatz dazu wird im zweiten Fall der \shorthandon
Befehl ausgeführt, wenn das Argument \title
bereits absorbiert wurde, also ?
nicht aktiv ist und als solcher für immer bestehen bleibt (im Ersetzungstext von \@title
, dem Makro, in dem \title
der Titel gespeichert wird).
Sie müssen das Lesen des Arguments nach \shorthandon
der 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 \title
nach platzieren \begin{document}
.