无法使用 textbf 写出粗体字符

无法使用 textbf 写出粗体字符

我正在使用 latex 和 R (swaeave),并且正在使用utf8编码,但是当我使用时\textbf{dataset},文本不是粗体。下面是我的部分代码。但我不确定这背后的原因是什么。

\documentclass[11pt,table,a4paper]{article}
\usepackage[T1,T2A]{fontenc}
\usepackage{CJKutf8}
\usepackage[english,russian]{babel}
\begin{document}
%chunk = 1
<<echo=FALSE,results=tex>>=
    cat("dataset","\n")
    cat("\\textbf{dataset}","\n")   # it should be bold  
 @
 \end{document}linecolor=goldenpoppy

错误是由于 造成的\usepackage[english,russian]{babel}。请帮我修复这个问题。

答案1

更新:参见第4点的解决方案。

我不太明白这个问题。显然,您正试图在 latex 文档中插入一些 R 代码,但没有考虑到清单中使用的某些字符对 latex 有特殊含义。

例如,您有%chunk=1,但由于%是 TeX 的注释字符,因此该行将被忽略。然后您有一些\n在里面,但由于\是 TeX 的转义字符,它会抱怨\n未定义。奇怪的是,您在\之前加倍了textbf,因此textbf在该上下文中不再是 tex 命令(而\\是换行符的命令)。您还必须#在 R 中引入注释,但#是 tex 用来表示参数的特殊字符。

正如您所说,所有这些错误都与 无关\usepackage[english,russian]{babel}。相反,它们是将其他语言的代码插入 tex 时发生的常见错误,而没有在 verbatim 环境中对其进行“保护”。此外,您linecolor=goldenpoppy在 之后有一个多余的内容\end{document},它将被忽略(它到底是干什么用的?)

当您的实际问题得到更多澄清时,我可以尝试猜测并提出一些解决方案。

  1. 解决错误并得到可编译的文档。用于verbatim禁用所有特殊字符的特殊含义。

    \documentclass[11pt,table,a4paper]{article}
    \usepackage[T1,T2A]{fontenc}
    \usepackage{CJKutf8}
    \usepackage[english,russian]{babel}
    \begin{document}
    \begin{verbatim}
    %chunk = 1
    <<echo=FALSE,results=tex>>=
        cat("dataset","\n")
        cat("\\textbf{dataset}","\n")   # it should be bold
     @
    \end{verbatim}
    \end{document}
    

    结果:

    逐字

  2. 使用listings包来获得 R 的语法高亮(注释用斜体表示,关键字用粗体表示,等等)

    \documentclass[11pt,table,a4paper]{article}
    \usepackage[T1,T2A]{fontenc}
    \usepackage{CJKutf8}
    \usepackage[english,russian]{babel}
    \usepackage{listings}
    \begin{document}
    \begin{lstlisting}[language=R]
    %chunk = 1
    <<echo=FALSE,results=tex>>=
    cat("dataset","\n")
    cat("\\textbf{dataset}","\n")   # it should be bold
    @
    \end{lstlisting}
    \end{document}
    

    结果:

    列表

  3. 我猜你想让文本“数据集”以粗体显示。如果你使用verbatim,命令\textbf不会被“执行”(因为\已经失去了转义字符的状态)。所以你需要一个逐字环境来禁用大多数特殊字符,但仍然允许将其\作为转义字符。Fancyvrb包中有这样的选项。不幸的是,在这种情况下\n也会被解释为命令。一个简单的解决方案是定义该命令。

    \documentclass[11pt,table,a4paper]{article}
    \usepackage[T1,T2A]{fontenc}
    \usepackage{CJKutf8}
    \usepackage[english,russian]{babel}
    \usepackage{fancyvrb}
    \def\n{\textbackslash n}
    \begin{document}
    \begin{Verbatim}[commandchars=\\\{\}]
    %chunk = 1
    <<echo=FALSE,results=tex>>=
    cat("dataset","\n")
    cat("\textbf{dataset}","\n")   # it should be bold
    @
    \end{Verbatim}
    \end{document}
    

    但是,哦!结果没有显示粗体(也许这是你的实际问题?):

    幻想VRB

    在这种情况下,这是因为你的tt字体没有粗体变体。并且可能与您使用的西里尔字体有关。请确认这是否是预期的问题。

  4. 更新:一旦确认(在评论中)问题不是(无法正常工作的)最小示例中的语法错误,而是缺少合适的tt粗体字体,解决方案就是提供这样的字体。通常,解决方案很简单\usepackage{extra-bold},只需安装粗体版本的cmtt字体。但是,在这种情况下,这也不起作用,因为此包在“OT1”编码下安装了这些字体,但文档使用了T2A编码。

    一种“强力”解决方案是欺骗 latex 使其“认为”字体cmttbT2A编码。这适用于提供的最小示例,因为列表仅包含 ascii 字符。我不知道如果列表包含西里尔字母或中文字符会发生什么。你必须自己尝试。

    为了实现这个“解决方案”(注意引号),您必须myboldtt.sty在与主文档相同的文件夹中编写一个文件,例如名为。该文件的内容将是:

    \providecommand{\EC@ttfamily}[5]{%
      \DeclareFontShape{#1}{#2}{#3}{#4}%
      {<5><6><7><8>#50800%
       <9><10><10.95><12><14.4><17.28><20.74><24.88><29.86>%
       <35.83>genb*#5}{}}
    \DeclareFontFamily{T2A}{cmtt}{\hyphenchar\font\m@ne}
    \EC@ttfamily{T2A}{cmtt}{m}{n}{latt}
    \EC@ttfamily{T2A}{cmtt}{m}{sl}{last}
    \EC@ttfamily{T2A}{cmtt}{m}{it}{lait}
    \EC@ttfamily{T2A}{cmtt}{m}{sc}{latc}
    \EC@ttfamily{T2A}{cmtt}{bx}{n}{labtl}
    \DeclareFontShape{T2A}{cmtt}{b}{n}
       {
        <5><6><7><8><9><10><12><10.95><14.4><17.28><20.74><24.88>cmttb10
        }{}
    \DeclareFontShape{T2A}{cmtt}{bx}{n}%
       {<->ssub*cmtt/b/n}{}
    \endinput
    

    然后确保它\usepackage{myboldtt}出现在您的主文档中。MWE 如下:

    \documentclass[11pt,table,a4paper]{article}
    \usepackage{bold-extra}
    \usepackage[T1,T2A]{fontenc}
    \usepackage{CJKutf8}
    \usepackage[english,russian]{babel}
    \usepackage{fancyvrb}
    \usepackage{myboldtt}
    \def\n{\textbackslash n}
    \begin{document}
    Regular text. \textbf{Bold}.
    \begin{Verbatim}[commandchars=\\\{\}]
    %chunk = 1
    <<echo=FALSE,results=tex>>=
    cat("dataset","\n")
    cat("\textbf{dataset}","\n")   # it should be bold
    @
    \end{Verbatim}
    \end{document}
    

    最后!产生了预期的输出:

    粗体 tt

    笔记:你需要有cm-mf-额外字体也安装在您的系统中。

相关内容