以下代码给出了错误:
\documentclass[ngerman]{article}
\usepackage{babel,csquotes}
\begin{document}
\enquote{\verb|foo|}
\end{document}
我猜这是典型的“你不能在命令中使用逐字材料”问题。除了\texttt{foo}
直接写或使用引号之外,还有其他解决方案吗?
答案1
我写了newverbs
包中考虑到了这样的应用,即引用逐字文本。除了其他功能外,它还提供了\qverb
用于逐字引用材料的宏。它兼容csquotes
并将其开始和结束引号用作参考。
\documentclass[ngerman]{article}
\usepackage{babel,csquotes}
\usepackage{newverbs}% load after csquotes
% If you want to have automatic nested quotes.
% By default single (inner) quotes are used.
\let\qverbbeginquote\openautoquote
\let\qverbendquote\closeautoquote
% or
%\renewverbcommand{\qverb}{\openautoquote}{\closeautoquote}
\begin{document}
\qverb|foo|
%Compare
\enquote{\texttt{foo}}
\end{document}
如果您想要支持包含一些逐字材料的引用普通文本,您可以直接使用\openautoquote
.. \closeautoquote
,或者使用括号组和宏将结束的引号放在组的末尾:
\documentclass[ngerman]{article}
\usepackage{babel,csquotes}
\newcommand{\genquote}{\openautoquote\bgroup\aftergroup\closeautoquote\aftergroup\egroup}
\begin{document}
{\genquote This is a longer text.
It also include verbatim \verb|foo|.
Etc.}
\end{document}
在(伪)宏形式中这也是可能的:
\documentclass[ngerman]{article}
\usepackage{babel,csquotes}
\newcommand{\genquote}{\openautoquote\bgroup\aftergroup\closeautoquote\let\dummy= }
\begin{document}
\genquote{This is a longer text.
It also include verbatim \verb|foo|.
Etc.}
\end{document}
(可以使用\dummy
内部的\@let@token
,这样就不会“浪费”宏名。)
答案2
\documentclass[ngerman]{article}
\usepackage{babel,csquotes,listings}
\begin{document}
\enquote{\lstinline|foo|}
\end{document}
答案3
\verb
在不使用任何包的情况下,在不允许的情况下使用逐字材料的一般机制是
\setbox0\hbox{\verb|fooo|}
\enquote{\usebox0}
请注意,您必须\setbox
在这里使用,而不是 LaTeX \sbox
,或者\savebox
因为他们将其参数读为宏参数,所以\verb
不允许。
答案4
这是一个“穷人的”环境形式(感谢 Martin Scharrer 指出命令\openautoquote
):
\documentclass[ngerman]{article}
\usepackage{babel,csquotes}
\newenvironment{inlineenquote}
{\openautoquote\ignorespaces}
{\unskip\closeautoquote}
\newenvironment{inlineenquote*}
{\openinnerquote\ignorespaces}
{\unskip\closeinnerquote}
\begin{document}
Abc \enquote{XXX} def \enquote*{XXX} ghi
Abc
\begin{inlineenquote}
\verb|XXX|
\end{inlineenquote}
def
\begin{inlineenquote*}
\verb|XXX|
\end{inlineenquote*}
ghi
\end{document}
人们可能会发现这比写作更容易管理
Abc \openautoquote\verb|XXX|\closeautoquote{} def
\qverb
当然,当逐字材料嵌入短语中而非唯一需要引用的内容时,这两种形式比马丁的形式更实用。