我想使用python生成乳胶文档。所以我创建了一个模板并使用字符串占位符来改变值。
template = r'''
\ {的DocumentClass文章}
\ usepackage [left = 2.54cm,right = 2.54cm,top = 2.54cm] {geometry} \ usepackage [english] {babel} %%%' french',' german',' spanish', ' danish'等。\ usepackage {amssymb} \ usepackage {txfonts} \ usepackage {mathdots} \ usepackage {pifont} \ usepackage {wasysym} \ usepackage {amssymb} \ usepackage {tabularx,pbox}
\开始{文件}
\ noindent表格A
\ noindent \ newline
\ noindent \ textbf {将香港国际机场扩展为一个 三跑道系统}
\ noindent海上旅游路线和高速管理计划 SkyPier轮渡
\ noindent \ textbf {\ underbar {}}
\ noindent \ textbf {\ underbar {环境审核检查记录}}
\ noindent
\ begin {tabularx} {\ linewidth} {| l | X |} \ hline参考计划:&海洋 SkyPier高速渡轮的旅行路线和管理计划 (EP条件2.10)\ \ hline监测数据:&渡轮运动数据 在\ textbf {\ underbar {"%(start_date)s"之间的时间段内收集至 "%(end_date)s"}} \ \ hline信息和数据已检查:& \ CheckedBox 自动识别系统(AIS)Data \ newline \ CheckedBox Daily SkyPier HSF动作\换行\ CheckedBox记录潜力 偏差\换行\ CheckedBox渡轮提供的响应 运营商\ \ hline评论和观察:&的偏差 检查了SkyPier HSF计划的实施情况。八个通知是 AAHK向渡轮运营商发出与潜在超速行驶相关的运营商 SCZ,不通过登机口接入点和\ \ hline
\ {端} tabularx
\ noindent \ newline \ newline \ newline \ newline \ newline \ newline
\ begin {tabularx} {\ linewidth} {| l | X | X | X |} \ hline& ET Leader \换行 ET的代表& IEC \ newline IEC的代表& PM \ newline PM的代表\ \ hline签名&& \ \ \ hline名称&特伦斯 Kong&& \ \ hline \ end {tabularx}
\ noindent
\ {端文档}
'''
但是,当我尝试运行时
page = template % {'start_date' : 'a', 'end_date' : 'b' }
返回
ValueError: unsupported format character ''' (0x27) at index 120
答案 0 :(得分:1)
问题在于行中的require(plyr)
require(dplyr)
ddplym <- function(.data, .variables, .fun, ..., .margin = TRUE, .margin_name = '(all)') {
if (.margin) {
df <- .ddplym(.data, .variables, .fun, ..., .margin_name = .margin_name)
} else {
df <- ddply(.data, .variables, .fun, ...)
if (.variables %>% length == 0) {
df$.id <- NULL
}
}
return(df)
}
.ddplym <- function(.data,
.variables,
.fun,
...,
.margin_name = '(all)'
) {
.variables <- as.quoted(.variables)
n <- length(.variables)
var_combn_idx <- lapply(0:n, function(x) {
combn(1:n, n - x) %>% alply(2, c)
}) %>%
unlist(recursive = FALSE, use.names = FALSE)
data_list <- lapply(var_combn_idx, function(x) {
data <- ddply(.data, .variables[x], .fun, ...)
# drop '.id' column created when no variables to split by specified
if (!length(.variables[x]))
data <- data[, -1, drop = FALSE]
return(data)
})
# workaround for NULL .variables
if (unlist(.variables) %>% is.null && names(.variables) %>% is.null) {
data_list <- data_list[1]
} else if (unlist(.variables) %>% is.null) {
data_list <- data_list[2]
}
if (length(data_list) > 1) {
data_list <- lapply(data_list, function(data)
rbind_pre(
data = data,
colnames = colnames(data_list[[1]]),
fill = .margin_name
))
}
Reduce(rbind, data_list)
}
rbind_pre <- function(data, colnames, fill = NA) {
colnames_fill <- setdiff(colnames, colnames(data))
data_fill <- matrix(fill,
nrow = nrow(data),
ncol = length(colnames_fill)) %>%
as.data.frame %>% setNames(colnames_fill)
cbind(data, data_fill)[, colnames]
}
%%%
使用\usepackage[left=2.54cm, right=2.54cm, top=2.54cm]{geometry} \usepackage[english]{babel} %%% 'french', 'german', 'spanish', 'danish', etc. \usepackage{amssymb} \usepackage{txfonts} \usepackage{mathdots} \usepackage{pifont} \usepackage{wasysym} \usepackage{amssymb} \usepackage{tabularx,pbox}
格式化字符串时,您可以通过将其转义为%
来编写实际 %
,因此%%
被解释为一个实际 %%%
后跟另一个用作占位符的%
,其中%
被解释为(无法识别的)格式字符。
只需将"'"
替换为偶数%%%
,例如%
如果您希望在生成的Latex代码中只有3 %%%%%%
,那么任何其他偶数代码都可以使用。