添加 LaTeX“标签”以从命令行包含/排除 Markdown 部分

添加 LaTeX“标签”以从命令行包含/排除 Markdown 部分

我希望能够根据命令行声明“打开/关闭”文档的某些部分。

我正在通过 Pandoc 将一大批供内部和外部使用的政策文件转换为 PDF,使用 LaTeX 模板,而 Pandoc 使用的是 pdfTeX。我还有一个 PowerShell 脚本可以递归转换它们。

gci -r -i *.md | foreach{$pdf=$_.directoryname+"\"+$_.basename+".pdf"; pandoc -f markdown --template template.latex -V geometry:margin=1.5cm -V fontfamily:lato -V fontfamilyoptions:default -V fontfamilyoptions:defaultsans -s $_.name -o $pdf}

外部版本不需要文档详细信息部分,即目录后的第一页。我或许可以删除第三页,但有些文档有较长的目录,有些则没有,除此之外,在我看来这不是一个优雅的解决方案。

我的典型文档看起来像这样(为了简洁起见,YAML 和内容减少了):

---
title: "A policy"
documentdetails: True/false % I could add something here for the default?
...

Table of contents:

\documentdetailstart % A tag looking like this for instance

# Document Details

#### Document Details

| Description | Status/Version | Reference Code | Control |
| --- |---|---|---|
|A Policy | Final / 1.0 | LaTeX | All |

\documentdetailend % A tag looking like this for instance

Begin Document

我如何才能为每个策略的 markdown 添加某种包装,这也许是在模板中处理的,以便我可以在命令行上添加类似下面的内容来自动省略/包含标签的内容。

-V Documentdetails:True

提前感谢您提供的任何帮助!

答案1

你可以有一个

\iftrue
Document details
\fi

并告诉你的 powershell 脚本用 iffalse 替换 iftrue 并编译一个新的副本。

\begininternal编辑:如果您用和包围所有仅供内部使用的内容\endinternal(如下所示),那么您可以通过在第二行替换iffalse来切换文档是用于 pdf 的内部副本还是外部副本iftrue。然后,您只需让脚本说“如果是外部的,则将 iffalse 替换为 iftrue 并编译”或类似内容。

\documentclass{article}
\let\begininternal\iffalse
\let\endinternal\fi

\begin{document}
Stuff everyone gets

\begininternal
Internal  only stuff
\endinternal

More stuff everyone gets

\begininternal
More internal only stuff
\endinternal

The end.
\end{document}

在此处输入图片描述

相关内容