如何在LaTeX中编写包含'字符的编程代码?

31

我正在尝试使用 verbatim 环境在 LaTeX 中编写编程代码,但当我编写以下内容时:

  \begin{verbatim}
     char ch = 'x';
  \end{verbatim}

然后围绕x的'字符显示不正确(它们看起来“卷曲”)。如何解决这个问题?

7个回答

42

在抄录模式下,加载upquote包可以解决此问题。

如果您想在等宽字体模式(例如\texttt{...})或任何其他字体中使用直引号,则可以使用textcomp包中定义的\textquotesingle命令:

\documentclass{article}
\usepackage{upquote,textcomp}
\begin{document}
\newcommand\upquote[1]{\textquotesingle#1\textquotesingle}
\verb|'c'| \texttt{\upquote{h}}
\textsf{\upquote{h}} \upquote{h}
\end{document}

这将适用于任何编码的字体,而不是依赖于特定的字形槽(例如默认的OT1编码中的\char13)。


我尝试过这个,但是\begin{verbatim} \textquotesingle \end{verbatim}的结果是完整地打印出了\textquotesingle - usernumber
1
在抄录模式下加载upquote包以解决此问题。 - Will Robertson
这绝对是最好的答案,可惜它排名如此靠后。 - Apollys supports Monica

22

在我的导言中添加\usepackage{upquote}就足够了。

也许旧版本的LaTeX或upquote需要更多的工作。


这个能和 minted 环境一起使用吗? - usernumber
1
@usernumber 不知道,抱歉。你得自己测试一下 :) - user82216
3
我希望这个答案能够获得更多的赞同。对我来说完美地解决了问题! - Elliot Gorokhovsky
很希望我能给这个赞投两次…… 我回到这里,因为我看到了几年前的原始点赞,所以知道这是解决方案。 - tom

7

我有一个问题

alt text

出了什么问题?

新的

如果你想得到像这样的结果

alt text

请写下以下内容

\makeatletter
\let \@sverbatim \@verbatim
\def \@verbatim {\@sverbatim \verbatimplus}
{\catcode`'=13 \gdef \verbatimplus{\catcode`'=13 \chardef '=13 }} 
\makeatother

5
引文的引号是“弯曲”的,如果我复制一个“弯曲”的引号并将其粘贴到源代码中,就会出现语法错误。 - ragnarius
这仅适用于默认的CMTT字体;如果您切换字体,它将无法工作。例如,使用\usepackage[T1]{fontenc} - Will Robertson
@Will:没错,我知道。但是我想帮忙。希望我成功了。 - Alexey Malistov

5

如果您要展示源代码,可以考虑使用 listings 软件包;它非常强大,并提供了一种显示“直引号”的选项。


1

\textsf{``}和\textsf{''}非常接近直引号。不需要使用任何特殊的包。


谢谢,这是唯一在我奇怪的组合中起作用的代码:\setmathfont[range... 和 CMU Serif。 - Flash Sheridan

1
如果您在verbatim环境中看到了弯曲的单引号,那么您打字机字体中的单引号确实是弯曲的,并且这是您正在进行的操作(我假设您正在显示一些C代码)所需使用的正确单引号。

4
这不是正确的使用方法,因为如果有人从我的PDF文档中复制并粘贴代码,那么他或她将会得到一个语法错误,因为编译器期望的是直接的单引号... - ragnarius
1
我认为uckelman的意思是这是一个直的单引号,只是在使用的字体中看起来弯曲了...你试过复制和粘贴来查看字符本身是否被修改了吗? - Jimbo
是的,我将它粘贴到emacs中,它看起来不像是一个直引号。 - ragnarius
引号通常是弯曲的,但键盘上的引号键(即ASCII编码)是直的。因此,如果您尝试表示“要键入的内容”,则使用弯曲的引号是错误的。 - Will Robertson

-3

这是我从另一个来源得到的,它可以正常工作。

使用 `` 开始双引号(此符号位于键盘上 ~ 符号下方)

使用 '' 结束双引号(此符号位于键盘上 " 符号下方)

因此,`` 引用双引号,取消引用双引号''

单引号也是如此,` 引用单引号,取消引用单引号'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接