csquotes 中的 \verb

csquotes 中的 \verb

以下代码给出了错误:

\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当然,当逐字材料嵌入短语中而非唯一需要引用的内容时,这两种形式比马丁的形式更实用。

相关内容