为什么代码
\documentclass{memoir}
\usepackage[latin1]{inputenc}
\usepackage[danish]{babel}
\usepackage[T1]{fontenc}
\def£#1£{``#1''}
\def€#1€{<#1>}
\begin{document}
Hi, £this£ is nice, and €this€ is beautiful
\end{document}
工作,而代码
\documentclass{memoir}
\usepackage[latin1]{inputenc}
\usepackage[danish]{babel}
\usepackage[T1]{fontenc}
\def /#1/{``#1''}
\def this #1 crashes{<#1>}
\begin{document}
Hi, /this/ is nice, and this this crashes is beautiful
\end{document}
才不是?
答案1
问题是£
和€
积极的字符,因此适合被\def
激活。/
字符则不然。要做到这一点,您可以调整其 catcode 以使其处于活动状态。以下方法可行。
\documentclass{memoir}
\usepackage[latin1]{inputenc}
\usepackage[danish]{babel}
\usepackage[T1]{fontenc}
\catcode`/=13
\def /#1/{``#1''}
\begin{document}
/this/
\end{document}
第二个示例的第二部分没有意义,因为this
和crashes
不是单个字符。即使你将它们简化为单个字母字符,你仍然会处于危险境地。例如,以下内容有效:
\documentclass{memoir}
\usepackage[latin1]{inputenc}
\usepackage[danish]{babel}
\usepackage[T1]{fontenc}
\catcode`q=13
\def q#1q{``#1''}
\begin{document}
qgq
\end{document}
d
但如果你用q
\catcode`d=13
那么您突然无法\def
再使用该命令,因为它包含d
!