You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用R逐字符复制含LaTeX代码的.tex文件且不修改内容

问题根源

你当前遇到的问题是由两个错误的用法导致的:

  1. readLines 默认会自动识别编码、转换字符、丢弃末尾无换行的行,没有明确指定编码的情况下读取非UTF-8文件必然出现乱码
  2. write.table 本身是为表格数据设计的输出函数,哪怕关闭了行列名、引号等参数,部分版本的R仍会额外添加换行符或执行隐式转义,编码参数为空时会按系统默认编码输出,进一步破坏原文件字符

解决方案

场景1:仅合并tex文件,不需要修改任何内容(完全逐字符复制)

直接用二进制读写模式,完全不解析文件内容,绝对不会修改任何原文件字符、也不会添加额外内容:

# 按合并顺序填写源文件路径
tex_file_list <- c(
  "path/to/file/a.tex",
  "path/to/file/b.tex",
  "path/to/file/c.tex",
  "path/to/file/d.tex"
)

# 二进制模式打开输出文件
out_conn <- file("Mother.tex", open = "wb")

# 逐文件原封不动写入
for (tex_path in tex_file_list) {
  file_size <- file.info(tex_path)$size
  raw_content <- readBin(tex_path, what = "raw", n = file_size)
  writeBin(raw_content, out_conn)
}

close(out_conn)

该方案不需要关心源文件编码,完全逐字节复制,不会产生任何转义、编码转换、额外字符插入的问题,生成的文件和手动拼接的内容100%一致。


场景2:需要插入R计算结果到tex内容中

如果需要修改c.tex的内容插入R计算结果,就明确指定读写编码、用纯文本读写函数避免额外处理:

# 读取时明确指定源文件编码(你源文件是什么编码就填什么,比如GBK、UTF-8、CP936等)
cont_a <- paste(readLines("path/to/file/a.tex", encoding = "UTF-8", warn = FALSE), collapse = "\n")
cont_b <- paste(readLines("path/to/file/b.tex", encoding = "UTF-8", warn = FALSE), collapse = "\n")
cont_d <- paste(readLines("path/to/file/d.tex", encoding = "UTF-8", warn = FALSE), collapse = "\n")

# 插入R计算结果生成c部分内容
r_result <- 12345 # 这里替换为你的实际计算结果
cont_c <- paste0("content based on values in r: ", r_result, "\n\\end{frame}")

# 合并所有内容
full_content <- paste(cont_a, cont_b, cont_c, cont_d, sep = "\n")

# 写入时明确指定输出编码,按字节写入避免转义
writeLines(full_content, con = "Mother.tex", useBytes = TRUE, fileEncoding = "UTF-8")
  • warn = FALSE 用于关闭“文件末尾无换行符”的警告,不影响内容读取
  • useBytes = TRUE 强制R按字节写入,不会自动转义LaTeX的反斜杠等特殊字符

内容的提问来源于stack exchange,提问作者Hans Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:30:00