如何在LaTeX中书写"C++"

62

我该如何在LaTeX中写出漂亮的"C++"呢?例如C$++$看起来不太好:加号太大,空间太多。


你可以看一下这个问题LaTeX源代码清单,就像专业书籍中的那样,它看起来很棒,而且完美地工作。 - Dexter
2
请参考tex.se.com上的建议答案:http://tex.stackexchange.com/questions/4302/prettiest-way-to-typeset-c - quazgar
7个回答

37

在这种情况下的标准解决方案是使用verbatim:

\verb!C++!

1
我喜欢这个解决方案,但是C看起来很糟糕...不像其他文本那样,所以我想在普通的C后面添加++符号。我尝试了这个,但不起作用:C \thinspace\verb!++! - mjsr
21
我懂了,这是我想要的C++代码。 - mjsr
但是我如何定义一个不会吞噬后面空格的命令呢?就像这样:\def\cpp{C{}\texttt{++}} - user2023370
2
@user643722,您可以在定义中包含一个不间断空格(~),但通常您需要在命令后转义空格,以便LaTeX知道它是实际的空格:“\cpp\ is fun”。否则,它会认为空格只是将\cpp的调用与其余测试分开。 - Michael Mrozek
1
@user643722 解析器会吞噬掉空格,因此你无法通过定义来解决这个问题。我自己使用的方法是将宏用大括号括起来,就像这样 "{\cpp} is fun",这样可以让解析器不再依赖后续的空格来识别宏名称的结尾。 - Alberto González Palomo
很久以前您发布了这个问题,但是通常在LaTeX中处理空格的更好方法是将代码写成\cpp{}。也有xspace,但我认为它有些过度解决。 - Joel

21

我一直在使用下面的代码来排版我的硕士论文中漂亮的C++代码。这段代码是从一个德语论坛中抄袭而来的。你只需要复制粘贴所有的代码到一个新的.tex文件中,然后选择适合你的部分即可…

\documentclass{article}
\usepackage{relsize}
\usepackage{lipsum}

%c from texinfo.tex
\def\ifmonospace{\ifdim\fontdimen3\font=0pt }

%c C plus plus
\def\C++{%
\ifmonospace%
    C++%
\else%
    C\kern-.1667em\raise.30ex\hbox{\smaller{++}}%
\fi%
\spacefactor1000 }

%c C sharp
\def\Csharp{%
\ifmonospace%
    C\#%
\else%
    C\kern-.1667em\raise.30ex\hbox{\smaller{\#}}%
\fi%
\spacefactor1000 }

\begin{document}
\begin{center}
{\Huge C++ $\rightarrow$ \C++ \& \Huge C\# $\rightarrow$ \Csharp}\\
\bigskip
\ttfamily
{\Huge C++ $\rightarrow$ \C++ \& \Huge C\# $\rightarrow$ \Csharp}\\
\bigskip
\sffamily
{\Huge C++ $\rightarrow$ \C++ \& \Huge C\# $\rightarrow$ \Csharp}
\end{center}
\section{\C++}
\lipsum[1]
\subsection{\Csharp}
\lipsum[1]
\end{document}

谢谢!结果很好。我有一个问题,就是在代码中我不明白如何在没有数学环境或\verb的情况下放置C++代码和\Huge命令。 - mjsr
1
抱歉,我不理解你的问题。 - Habi
好的,谢谢。我之前对加号的使用有些困惑。我以为数学环境是必不可少的,但现在我意识到并非如此。xD - mjsr
不错,我觉得这样看起来更好一些:\def\ifmonospace{\ifdim\fontdimen3\font=0pt } \def\Cpp{% \ifmonospace{C++}\else{C\kern-.13em\raise.65ex\hbox{\textbf{\tiny{++}}}}\fi \spacefactor1000 } - blais
很好的答案,尽管我更喜欢 \textsf{C\kern-.05em\raise.43ex\hbox{\smaller[5]{\textbf{+\kern-.04em+}}}}。 - Kevin Bader

15

您可以尝试使用打字机字体。

\texttt{C++}

7

我发现以下内容可以得到良好的结果:

\def\Cplusplus{C\raisebox{0.5ex}{\tiny\textbf{++}}}

我喜欢这个结果,它不需要添加很多额外的东西。 - stochastic

4

这是我很久以前使用的:

\newcommand*{\Cpp}{C\ensuremath{++}\xspace}

可以像\Cpp一样使用(需要xspace包)。但正如你所说,它并不是很美观。


3

这个回答是关于tex网站上同样问题的,它提供了一个我认为看起来不错的方式。

%C++
\newcommand\Cpp{C\nolinebreak[4]\hspace{-.05em}\raisebox{.4ex}{\relsize{-3}{\textbf{++}}}}
%C#
\newcommand\Csh{C\nolinebreak[4]\hspace{-.05em}\raisebox{.4ex}{\relsize{-3}{\textbf{\#}}}

无法编辑,因为编辑队列已满,但是C#行缺少一个闭合的}。 - Arsenal

2

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