如何将 \MakeOuterQuote{"} 与 l3doc 包结合使用?

如何将 \MakeOuterQuote{"} 与 l3doc 包结合使用?

考虑这个 TeX 文件

\documentclass{l3doc}
\usepackage{csquotes}
\MakeOuterQuote{"}
\begin{document}
\enquote{hello} "hello"
\end{document}

输出

我想用作"引号字符。csquotes文档指出\MakeOuterQuote可以使用它来执行此操作,但由于某种原因,它反而产生了逐字代码。

发生了什么事?我该如何解决?

答案1

删除"作为逐字简写:

\documentclass{l3doc}
\usepackage{csquotes}
\AtBeginDocument{\DeleteShortVerb\"}
\MakeOuterQuote{"}
\begin{document}
\enquote{hello} "hello"
\end{document}

在此处输入图片描述

但是作为德国人,我永远不会使用"引号,因为这与 babel 为德语设置的简写相冲突。

答案2

里面l3doc.cls有两行硬编码

\AtBeginDocument
  {
    \MakeShortVerb \"
    \MakeShortVerb \|
  }

这样,2 个字符"|将被转换为短动词字符。(注:的文档\MakeShortVerb可以在中找到texdoc doc。使用的fancyvrbl3doc具有类似的命令,\DefineShortVerb

"任何在序言中重新定义的尝试都将被覆盖,并且csquotes不支持在文档本身中定义它们。

我可以找到一种方法来覆盖该行为,但它相当丑陋:

\RemoveFromHook{begindocument}[l3doc]
\MakeOuterQuote{"}

附注:\RemoveFromHook在较新的 LaTeX 版本中可用。在较旧的版本中,您可能需要手动操作\@begindocumenthook...?

至少在当前版本中,它不会产生任何意外的后果,可以通过执行以下命令来显示

\ShowHook{begindocument}

这表明上面的 2 个命令是唯一被 删除的命令\RemoveFromHook

(这意味着在未来的某些版本中,l3doc 可能会执行其他操作,\AtBeginDocument并且上述代码将会中断。请小心使用。)

(尽管您可能希望\MakeShortVerb \|事后手动执行此操作。)

相关内容