我需要一个将 扩展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}