在我的论文中,我创建了多个 Git 存储库,并使用GitHub 用作存储库说明的 readme.md。现在我想把这些文档添加到我的论文附录中。最好的方法是什么?
我更喜欢一种仅链接readme.md
文件的解决方案,以便自动包含更改。
答案1
最好使用 Markdown-to-LaTeX 编译器和 Makefile 来构建项目。以下是您可以如何进行的示例概要:
- 安装 pandoc
创建包含以下内容的 Makefile 或等效文件(批处理文件、脚本等),对您希望包含的每个项目自述文件重复第一行:
pandoc /path/to/GitHub/project/readme.md -f markdown -t latex -s -o /path/to/GitHub/project/readme.tex pdflatex <arguments> file.tex
\include{/path/to/GitHub/project/readme}
在适用的情况下在 LaTeX 文档中添加语句。- 使用 Makefile 构建您的项目。每次更改 LaTeX 文档后,不必严格执行此操作,只需在更改/添加 GitHub 项目自述文件后执行此操作即可。
或者,你可以关注这个答案并在 LaTeX 中即时使用 pandoc。我认为这不是一个优雅的解决方案,但尽管如此,这里还是简要介绍一下如何使用它来实现您想要的效果:
- 安装 pandoc
- 从链接答案中的示例文档中复制序言
要嵌入 Markdown 文件,请将其嵌入到您的文档中,如下所示:
\begin{markdown} \input{/path/to/GitHub/project/readme.md} \end{markdown}
- 每次编译文档时,它也应该编译并嵌入 Markdown 文档。
答案2
我的回答基于 @Big-Blue 建议的一些 powershell 自动化。我猜你有一个文件夹,里面有你所有的 repos,就像一个 Projects 文件夹。
文件夹结构示例:
-MyProjects
-MardownsToPdfs.ps1 << see script bellow
-ProjectDirA
-ReadmeA.md
-ImageA.png
-ProjectDirB
-ReadmeB.md
-ImageB.png
MardownsToPdfs.ps1文件内容:
$currendDir=(Get-Item -Path ".\" -Verbose).FullName
#repeat for every *.md file
childitem ../ -include *.md -recurse | foreach ($_) {
$mdPath = $_.FullName
$pdfPath = $_.FullName.Replace(".md", ".pdf")
$pdfFileName = $_.Name.Replace(".md", ".pdf")
cd $_.directory
pandoc --wrap=preserve -f markdown+hard_line_breaks -s -V geometry:margin=1in -o $pdfPath $mdPath
cd $currendDir
}
在 *.ps1 文件上右键单击“使用 Powershell 运行”,它将在每个同名 *.md 文件旁边创建一个 PDF。
您可以像这样将 PDF 文件包含在 *.tex 文件中:
%In your latex *.tex file you can embed
\includepdf[pages=-]{MyProjects/ProjectDirA/ReadmeA.pdf}
答案3
我实际上想做同样的事情,即将该readme.md
文件包含在附录中。
我发现markdown
包非常有用。事实上,它有一个经过修改的输入命令,可以包含外部.md
文件,您可以按原样导入它们。它是\markdownInput{path/to/readme.md}
。
我做了以下事情:
\documentclass{article}
% your packages here
\usepackage{markdown}
\begin{document}
% your content here
\appendix
\markdownInput{path/to/readme.md}
\end{document}
意识到:
- markdown 的第一个分段级别(单个
#
)对应于\chapter
,依此类推(##
对应于\section
,...)。因此,您可能需要使用该shiftHeadings
选项调整分段级别。 - 您必须在启用 shell 转义的情况下构建文档(即
pdflatex --shell-escape
)。