![Почему \shorthandon и \shorthandoff нельзя встроить в другие макросы?](https://rvso.com/image/286988/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20%5Cshorthandon%20%D0%B8%20%5Cshorthandoff%20%D0%BD%D0%B5%D0%BB%D1%8C%D0%B7%D1%8F%20%D0%B2%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C%20%D0%B2%20%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D0%B5%20%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81%D1%8B%3F.png)
Окружение \title
макроса скобками \shorthandon{;:!?}
и \shorthandoff{;:!?}
дает ожидаемый результат на babel
языке french
(добавляется пробел перед «?», «!», «:» и «;»):
\documentclass[french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
%
\shorthandon{;:!?}%
\title{La crise? Quelle crise?}
\shorthandoff{;:!?}%
%
\begin{document}
\maketitle
\end{document}
Но это не работает, если \shorthandon
и \shorthandoff
встроены в (переопределение) макроса \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}
В чем причина? Есть ли способ обойти это?
решение1
Saying \shorthandon{?}
делает ?
активный символ. Таким образом, когда аргумент to \title
поглощается, в первом примере, он активен и, в \maketitle
, LaTeX будет использовать для него текущее определение, которое, как оказалось, определено babel-french
.
Напротив, во втором случае \shorthandon
команда выполняется, когда аргумент \title
уже был усвоен, поэтому ?
не активен и таким он останется навсегда (в тексте замены \@title
, который является макросом, где \title
хранится заголовок).
Вам придется отложить чтение аргумента после \shorthandon
его выполнения.
\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}
Но я бы просто поставил \title
после \begin{document}
.