向杰出的 TeXperts 聚会致敬!
babel
我的问题是:如果用包含引号()作为活动字符的简写来定义宏"
,则调用时它不会扩展。
MWE(TeXLive 2014 最新更新):
\documentclass[11pt]{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\newcommand{\myname}{А.",С.",Пушкин "--- самый"=самый известный русский поэт.}
\newcommand{\mynamea}{\shorthandon{"}А.",С.",Пушкин "--- самый"=самый известный русский поэт.}
\begin{document}
\myname \par
\expandafter\myname \par
\mynamea \par
\expandafter\mynamea \par
Benchmark: \par
А.",С.",Пушкин "--- самый"=самый известный русский поэт.
\end{document}
供您参考,在 中[russian]{babel}
有以下定义:
\declare@shorthand{russian}{",}{\nobreak\hskip.2em\ignorespaces}
\declare@shorthand{russian}{"=}{\nobreak-\hskip\z@skip}
是"---
西里尔文本破折号的简写\cdash---
。
由于某些原因,尽管 LaTeX 明确要求他扩展这四个命令,但他却没有这样做。在这种情况下,最佳做法是什么?
答案1
快速而又粗糙的解决方案。有一个选项KeepShorthandsActive
可以babel
提供所需的结果。当将序言中的相应行更改为以下内容时,将发生以下情况\usepackage[russian, KeepShorthandsActive]{babel}
:
但是,这种行为似乎很奇怪。我想知道这种扩展方式是故意的吗,还是\myname
应该重写宏?能用更干净的方式完成吗?