
Gostaria de poder "ligar/desligar" certas seções dos meus documentos, dependendo de uma declaração de linha de comando.
Estou convertendo um grande grupo de documentos de política que são para uso interno e externo, via Pandoc, para PDF, usando um modelo LaTeX, e Pandoc está usando pdfTeX. Também tenho um script do PowerShell que os converte recursivamente.
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}
As versões externas não precisam da seção de detalhes do documento, que é a primeira página após o índice. Provavelmente eu poderia remover a terceira página, mas há alguns documentos com ToCs longos e outros sem, além disso, não me parece uma solução elegante.
Meu documento típico é mais ou menos assim (YAML e conteúdo reduzidos por questões de brevidade):
---
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
Como posso adicionar algum tipo de empacotamento à marcação de cada política, talvez tratada no modelo, para que eu possa adicionar algo como o abaixo na linha de comando para omitir/incluir automaticamente o conteúdo da tag.
-V Documentdetails:True
Agradeço antecipadamente por qualquer assistência que você possa fornecer!
Responder1
Você poderia ter um
\iftrue
Document details
\fi
e diga ao seu script do PowerShell para substituir iftrue por iffalse e compilar uma nova cópia.
Editar: se você cercar todo o material interno com \begininternal
e \endinternal
conforme abaixo, poderá alternar entre se o documento é para uma cópia interna ou externa do PDF, substituindo iffalse
por iftrue
na segunda linha. Então você só precisa fazer com que seu script diga "se externo, substitua iffalse por iftrue e compile" ou algo assim.
\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}