定义一个扩展为引号的宏

定义一个扩展为引号的宏

我需要一个将 扩展argument为字符串 的宏{ "argument"}。以下宏似乎可以解决问题:

\newcommand{\myquote}[1]{\{ "{#1}"\}}

这个宏为输入产生了我所期望的xyzzy{\myquote{fubar}}输出。xyzzy{ ”fubar”}

ngerman但是,一旦我通过在标题中写入将包添加到文档中,宏就无法正常工作\usepackage{ngerman}。 现在输入xyzzy{\myquote{fubar}}不再产生预期的输出,而是在运行时导致错误latex

! ngerman: The command "fubar is undefined.

我尝试使用以下方法修改宏

\newcommand{\myquote}[1]{\{ \noexpand"{#1}\noexpand"\}}

这样可以消除错误,但引号"根本不再显示。观察到的输出不是xyzzy{ fubar}预期的输出(引号丢失了)。

即使存在包,我该如何编写才能产生预期输出的宏ngerman

[编辑] 澄清:宏是后处理器的标记。因此,不能使用印刷引号,而应使用常规双引号。[/编辑]

答案1

ngerman包已过时,应替换为babel已加载该选项的软件包ngerman

由于 Computer Modern 创建的默认字体仍然不是上引号"而是英文右引号,因此您应该使用T1字体编码(对于德语文本,您无论如何都应该使用它)和lmodern字体(或您喜欢的任何字体)。

代码

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{lmodern}% or libertine …
\usepackage[T1]{fontenc}
\newcommand{\myquote}[1]{\{"{#1}"\}}
\begin{document}
\myquote{fubar}
\end{document}

输出

在此处输入图片描述

在此处输入图片描述

答案2

这个优秀的csquotes软件包为各种引用问题提供了方便的接口。主要目的是印刷正确的引用,但它也提供了直接访问各种引用字符的命令。

 \documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{csquotes}

\newcommand{\myquote}[1]{\{\textquotedblleft{#1}\textquotedblleft\}}

\begin{document}

  Text in \enquote{typographischen Anführungsstrichen} oder \myquote{anderen Anführungsstrichen}.

\end{document}

在此处输入图片描述

相关内容