我正在使用 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}
,它将被忽略(它到底是干什么用的?)
当您的实际问题得到更多澄清时,我可以尝试猜测并提出一些解决方案。
解决错误并得到可编译的文档。用于
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}
结果:
使用
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}
结果:
我猜你想让文本“数据集”以粗体显示。如果你使用
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}
但是,哦!结果没有显示粗体(也许这是你的实际问题?):
在这种情况下,这是因为你的
tt
字体没有粗体变体。并且这可能与您使用的西里尔字体有关。请确认这是否是预期的问题。更新:一旦确认(在评论中)问题不是(无法正常工作的)最小示例中的语法错误,而是缺少合适的
tt
粗体字体,解决方案就是提供这样的字体。通常,解决方案很简单\usepackage{extra-bold}
,只需安装粗体版本的cmtt
字体。但是,在这种情况下,这也不起作用,因为此包在“OT1”编码下安装了这些字体,但文档使用了T2A
编码。一种“强力”解决方案是欺骗 latex 使其“认为”字体
cmttb
有T2A
编码。这适用于提供的最小示例,因为列表仅包含 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}
最后!产生了预期的输出:
笔记:你需要有cm-mf-额外字体也安装在您的系统中。