![為什麼 \shorthandon 和 \shorthandoff 不能嵌入其他巨集中?](https://rvso.com/image/286988/%E7%82%BA%E4%BB%80%E9%BA%BC%20%5Cshorthandon%20%E5%92%8C%20%5Cshorthandoff%20%E4%B8%8D%E8%83%BD%E5%B5%8C%E5%85%A5%E5%85%B6%E4%BB%96%E5%B7%A8%E9%9B%86%E4%B8%AD%EF%BC%9F.png)
用and包圍\title
宏給出了's語言的預期結果(在 '?'、'!'、':' 和 ';' 之前添加了空格):\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
說話\shorthandon{?}
可以塑造?
活躍的性格。因此,當 的參數\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}
.