我有一个用 luatex 格式化的文档,开头
\documentclass[b4paper]{article}
\usepackage{expl3}
\usepackage{hyperref}
\usepackage{listings} %Requires luatex engine to handle UTF-8
%Consider using minted, but ...
...
\begin{document}
\lstset{language=Rexx, extendedchars=true, frame=trbl}
\maketitle
使用 listings 包显示 Rexx 的代码示例,Rexx 是一种使用 ASCII 撇号作为分隔符的语言。代码示例包括一个带重音符号 aigu 的字母 e(“é”),我将其输入为“\'{e}”,以及一个 ASCII 撇号(“'”),我将其输入为“{\textquotesingle}”。这在文本中运行良好
For example, the Unicode string {\textquotesingle\}Caf\'{e}{\textquotesingle\} has 4 code points, 4
grapheme clusters and 5 octets in UTF-8 encoding while
{\textquotesingle\}Cafe\textbf{'}{\textquotesingle\} has 5 code points, 4 grapheme clusters and 6 octets
in UTF-8 encoding, yet many text processing applications need to treat
them as equivalent.
正确呈现为
例如,Unicode 字符串“Café”在 UTF-8 编码中有 4 个代码点、4 个字素簇和 5 个八位字节,而“Cafe”在 UTF-8 编码中有 5 个代码点、4 个字素簇和 6 个八位字节,但许多文本处理应用程序需要将它们视为等效的。
撇号应被呈现为直的。
第二部分是
\begin{lstlisting}
foo = 'Ren\'{e}'
parse upper var foo bar
\end{lstlisting}
呈现为
foo = ’Ren\’{e}’
____解析上部变量 foo bar
其中 _ 实际上是可见的空格杯。 ' 未插入,第二行上的前导空格未正确呈现。
我能够使用 \'{ } 来显示裸重音符号 aigu,并且使用最近的 LaTeX,我能够使用 \textquotesingle 来显示直撇号。
列表的 MWE:
\documentclass[b4paper]{article}
\usepackage{enumitem}
\usepackage{expl3}
\usepackage{hyperref}
\usepackage{listings} %Requires luatex engine to handle UTF-8
%Consider using minted, but ...
\begin{document}
\lstset{language=Rexx, extendedchars=true, frame=trbl}
\begin{lstlisting}
foo = {\textquotesingle\}Ren\'{e}{\textquotesingle}
parse upper var foo bar
\end{lstlisting}
\end{document}
列表文档声称可以转为 LaTeX,但我无法做到这一点。我上面使用的标记,以纯文本形式,正确呈现为“'Café'”。
所以我的问题是,在不输入 U+7F 以上字符的情况下,我应该对示例代码使用什么与 luatex 兼容的包和标记,而不会影响文档中其他地方的撇号的渲染?只要代码缩进、不换行、带框或以其他方式区分,我就可以放弃语法突出显示。
答案1
我不确定你为什么要用老方法输入重音符号。
\documentclass{article}
\usepackage{fontspec}
\usepackage{listings}
% choose the fonts
% \setmainfont{...}
% now a special font for listings
\defaultfontfeatures{}
\newfontfamily{\listingfont}{Latin Modern Roman}
\lstset{
language=Rexx,
extendedchars=true,
frame=trbl,
basicstyle=\listingfont
}
\begin{document}
\begin{lstlisting}
foo = 'René'
parse upper var foo bar
\end{lstlisting}
\end{document}
答案2
这两种方法都有效
\documentclass[b4paper]{article}
\usepackage{alltt}
\usepackage{framed}
\usepackage{upquote}
\begin{document}
Using alltt with framed and upquote.
\begin{framed}
\begin{verbatim}
foo='Ren\'{e}'
bar=`Ren\'{e}`
\end{verbatim}
\end{framed}
\end{document}
和
\documentclass{article}
\usepackage{fontspec}
\usepackage{hyperref}
\usepackage{listings}
\usepackage{upquote}
\begin{document}
\lstset{language=Rexx, extendedchars=true, frame=trbl, escapechar={!},linewidth=20em}
\section{Statement of problem}
\subsection{Secondary Problem}
Using upquote listings with language=Rexx, extendedchars=true, frame=trbl, escapechar={!}, width=20em
\begin{lstlisting}
foo = 'Ren!\'{e}!'
baz = `Ren!\'{e}!`
parse upper var foo bar
\end{lstlisting}
\结束{文档}