![在 Latex 中逐字引用](https://linux22.com/image/318631/%E5%9C%A8%20Latex%20%E4%B8%AD%E9%80%90%E5%AD%97%E5%BC%95%E7%94%A8.png)
我想使用quote
环境引用一些段落。但是引用的段落包含一些以文本格式编写的数学模式方程式,例如“您的论文毫无价值,因为 x^2 +y^2 = 0。”我希望能够按原样引用此内容,而不使用数学模式。是否有类似逐字和引用环境的混合,这样我就不必逐一检查此类方程式的每个实例并将其替换为类似的东西\verb*x^2+y^2=0*
?也许在字体选择方面也具有一定的灵活性。
编辑:基本上,我想要的是 LaTeX 对引用文本的所有文本处理功能,同时按原样处理 a^2+b^2 = 0 之类的内容,只显示一些逐字显示的字符。我不知道如果不用特殊字符将 a^2+b^2=0 等括起来,是否可以实现这一点。
答案1
您可以将此“逐字引用”设置为常规列表。下面我定义了一个新列表verbquote
:
\documentclass{article}
\usepackage{listings,lipsum}
\lstnewenvironment{verbquote}[1][]
{\lstset{columns=fullflexible,
basicstyle=\ttfamily,
xleftmargin=2em,
xrightmargin=2em,
breaklines,
breakindent=0pt,
#1}}% \begin{verbquote}[..]
{}% \end{verbquote}
\begin{document}
\lipsum[1]
\begin{verbquote}
Your paper is worthless because x^2 + y^2 = 0. Please reconsider what you are attempting.
\lipsum[2]
\end{verbquote}
\lipsum[2]
\end{document}
所有内容verbquote
将按原样设置。您可以使用以下任何选项更改字体(或任何其他样式):listings
。
您还可以重置可能导致问题的活动键的类别代码,以将其打印为“其他”(类别代码 12):
\documentclass{article}
\usepackage{lipsum}
\usepackage[T1]{fontenc}% http://tex.stackexchange.com/q/48632/5764
\newenvironment{verbquote}
{\catcode `^=12% Math superscript
\catcode `_=12% Math subscript
\catcode `$=12% Math deliniation
\begin{quote}}
{\end{quote}}
\begin{document}
\lipsum[1]
\begin{verbquote}
Your paper is worthless because x^2 + y_2 = 0 or about $0. Please reconsider what you are attempting.
\end{verbquote}
\lipsum[2]
\end{document}
答案2
你可以实现与以下相同的效果Mico 的回答借助包shortvrb
,$
暂时将其转换为逐字转换。
环境quote
的修改方式etoolbox
与 Mico 的回答完全相同。
\documentclass{article}
\usepackage{shortvrb}
\usepackage{etoolbox}
\AtBeginEnvironment{quote}{\MakeShortVerb\$}
\AtEndEnvironment{quote}{\DeleteShortVerb\$}
\begin{document}
\noindent
$a^2 + b^2 = 0$
\begin{quote}
Your paper is worthless because you claim that $a^2 + b^2 = 0$ and that $1 + 1 = 3$.
\end{quote}
$1 + 1 = 3$
\thispagestyle{empty}
\end{document}
答案3
我对您的目标的解释如下:(i)在quote
环境内部,且仅在quote
环境内部,内联数学材料(即以$
符号开头和结尾的内容)应使用等宽字体而不是数学模式自动排版。(ii)环境内的所有文本模式材料quote
都应使用常规文本字体排版。
如果这个解释是正确的,则可以通过使用 LuaLaTeX 并设置一个 Lua 函数来实现,该函数 (a) 仅在quote
环境内活动并且 (b) 用逐字模式替换内联数学模式。
% !TEX TS-program = lualatex
\documentclass{article}
%% Lua-side code
\usepackage{luacode,luatexbase}
\begin{luacode}
do_conversion = false
function inline_math_to_verbatim ( line )
if do_conversion then
return (string.gsub(line,"%$(.-)%$","\\verb&%1&"))
end
end
-- assign this function to the "process_input_buffer" callback
luatexbase.add_to_callback ( "process_input_buffer",
inline_math_to_verbatim, "inline_math_to_verbatim" )
\end{luacode}
%% TeX-side code
\usepackage{etoolbox}
\AtBeginEnvironment{quote}{\luadirect{do_conversion=true}}
\AtEndEnvironment{quote}{\luadirect{do_conversion=false}}
\begin{document}
\noindent
$a^2 + b^2 = 0$
\begin{quote}
Your paper is worthless because you claim that $a^2 + b^2 = 0$ and that $1 + 1 = 3$.
\end{quote}
$1 + 1 = 3$
\end{document}