Я пытаюсь запустить воспроизводимые параметризованные отчеты в Rmarkdown, и у меня заданы два параметра: центр (средство для запуска отчета) и язык (немецкий или французский).
В моем YAML-заголовкеЯ включил два текстовых файла (preamble & before_body), которые имеют адаптацию к конкретному языку или центру, но я вызываю параметры позже в отчете.До сих пор мне приходилось менять эти 5 строк вручную перед запуском отчета - это управляемо, но не «безопасно».Мне любопытно, если бы был программный способ адаптации этих текстов, так что нужно изменить только параметры params $ center?
заголовок yaml в основном файле выглядит так - адаптации для отчетавыполняются в center
и language
:
---
fontsize: 11pt
linestretch: 1.0
link-citations: yes
output:
pdf_document:
includes:
in_header: preamble.tex
before_body: before_body.tex
after_body: after_body.tex
latex_engine: xelatex
toc: yes
toc_depth: 3
number_sections: true
keep_tex: true
documentclass: report
subparagraph: yes
params:
center: 148
language: "D"
date: !r lubridate::today()
title: Report center `r params$center`, `r lubridate::month(params$date, label = TRUE, abbr = FALSE,
locale = {if (params$language == "D") {"de_CH.UTF-8"} else {"fr_FR.UTF-8"}})` `r lubridate::year(params$date)`
---
preamble.tex выглядит следующим образом - необходимо адаптировать язык с помощью \usepackage[german]{babel}
и \usepackage[german=quotes]{csquotes}
:
% loading necessary LateX-packages
\usepackage[utf8]{inputenc}
\usepackage{underscore}
\usepackage[german]{babel}
\usepackage[german=quotes]{csquotes}
\usepackage{graphicx}
\usepackage{geometry}
\usepackage{titlesec}
\usepackage{fancyhdr}
\usepackage{longtable}
\usepackage{fontspec}
\setmainfont{Arial}
\usepackage{booktabs}
\usepackage{pdfpages}
\usepackage{caption}
\usepackage{float}
% set column widths for tabularx
\usepackage{tabularx}
\newcolumntype{s}{>{\hsize=.7\hsize}X}
\newcolumntype{b}{X}
% include a fancy header
\fancypagestyle{plain}{%
\fancyhf{}
\pagestyle{fancy}\setlength\headheight{100pt}
\fancyhead[L]{\includegraphics[width=5cm]{img/INS_logo.png}}
\fancyhead[R]{\includegraphics[width=4.1cm]{img/shurp-2018-logo-blue-transparent.png}}
\renewcommand{\headrulewidth}{0pt}
\rfoot{\thepage}
}
\pagestyle{plain}
% define landscape mode
\usepackage{pdflscape}
\newcommand{\blandscape}{\begin{landscape}}
\newcommand{\elandscape}{\end{landscape}}
% set page geometry
\geometry{a4paper, total={170mm,257mm}, left=20mm, top=40mm}
% make the word "Chapter" disappear - only display the chapters name
\titleformat{\chapter}
{\normalfont\LARGE\bfseries}{\thechapter}{1em}{}
\titlespacing*{\chapter}{0pt}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
% % Following below
% turns maketitle off, then you can define your own titlepage in before_body.tex
\let\oldmaketitle\maketitle
\AtBeginDocument{\let\maketitle\relax}
before_body.tex выглядит следующим образом (титульный лист pdf с дизайном), необходимо внести изменения в \includepdf[pages={1}]{img/SHURP-Report-Cover-DE-1901.pdf}
(-DE- преобразуется в -FR -):
% titlepage included by pdf
\includepdf[pages={1}]{img/SHURP-Report-Cover-DE-1901.pdf}
% this line includes a page with the title: TEXT from the YAML-header - if you
% dont need that, rm or better comment it (wont be evaluated then)
\let\maketitle\oldmaketitle
\maketitle
Я мог бы дажеавтоматизировать params $ language (центры с идентификатором <250 являются немецкими, а выше - французскими) - я оставил это, чтобы знать об изменении других документов. </p>
Кроме того, вторая страница теперь имеет заголовок: "Центр отчетов (центр), месяц, год ", но часть" Центр отчетов (центр) "должна быть заменена фактическим названием и адресом центра (который хранится в другом файле).До сих пор я просто менял это вручную в Acrobat.
Есть ли способ сделать это более элегантно?В некоторых других моих вопросах кто-то упомянул knitr::knit_hooks$set(document = function(x) { }
об изменении файла .tex всего документа перед его компиляцией - но я не понял, как это работает.