这是 LaTeX 的一个很好的用例吗?

这是 LaTeX 的一个很好的用例吗?

我想了解 LaTeX 是否适合我的用例。我不了解 LaTeX,很难确定这些事情是否都可行,或者这更多的是一个编译器问题?

  • 我正在尝试为一个软件产品创建一个文档,该产品会根据我们销售给的客户进行重新命名。
  • 需要基于文本的文档,以便多个开发人员可以更新它,并且可以将其合并在一起而不会在版本控制中出现问题。
  • 文档需要支持主题——不同的颜色和样式(外观和感觉)
  • 该文档需要能够使用转换时可替换的变量。例如{客户名称}->编译为 PDF->沃尔玛
  • 文档应该支持条件,或者以某种方式支持可以在编译时附加的“客户风格”。例如: compile latex --customer:walmart.style
  • 需要输出 PDF,也可以选择输出 HTML。

在互联网上搜索时,我不断回到 LaTeX,但我很难区分文档语言提供的内容与编译器提供的内容。

那么,这可以用 LaTeX 来实现吗?如果可以,我需要一个特定的编译器吗?如果不需要,有没有可以提供类似功能的产品推荐?

编辑1

哇,这是一个非常活跃和乐于助人的社区,感谢大家的回复!

以下是今天使用的但不能满足需求的一个例子:

  1. 开发人员/人类使用 markdown 编写文档

    <snip>
    that help your institution function more effectively.
    
    ![](md_images/media/image2.png){ width=90% }
    
    
    # Hardware Requirements
    
    1.  Single Tier system (windows + CIE + SQL) - recommended for low-medium volume sites:
    
        **BASE**  (supports up to 4 Channels high volume):
    <snip>
    

    然后通过 Pandoc 和 MiKTeX 以及.css样式来生成.doc、HTML 和 PDF。但是,它不能很好地处理变量或条件,并且外观和感觉需要全部在 CSS 中完成,这会增加很多开销,尤其是尝试跨越输出文件类型时。

    这将产生如下输出:

    在此处输入图片描述

  2. 希望有某种与此类似的系统(现在还不起作用,只是经过了 Photoshop 处理):

    # Hardware Requirements for {customer}
    

    会输出类似这样的内容:

    在此处输入图片描述

编辑2:

尝试解决保留问题:

  • LaTeX 支持品牌化吗?例如,外观和感觉、可替换变量和条件文本。
  • LaTeX 可以输出为 PDF、HTML 并.docx使用单个基础文档 + 品牌样式表吗?

答案1

这个问题有点模糊和开放式,但您可以使用的一种方法是为每个客户设置单独的“样式”文件,然后让主文件在您编译文档时动态加载适当的样式。

更明确地说,假设你的主文档文件是有点人造的main.tex

\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{enumitem}
\setlist[description]{
  font=\sffamily\bfseries\color{DodgerBlue},
  labelwidth=\textwidth
}
\newif\ifPaying

\expandafter\usepackage\expandafter{\customer}% load customer data

\begin{document}

\begin{description}
  \item[Customer name] \customerName
  \item[Address] \address
  \ifPaying\item[Account] \accountNumber\fi
\end{description}

\end{document}

并且有两个客户文件customer1.sty

\newcommand\customerName{Alfred}
\newcommand\address{Mexico}
\Payingtrue
\newcommand\accountNumber{10309-190123-9}

customer2.sty

\newcommand\customerName{Julie}
\newcommand\address{Spain}
\Payingfalse

customer1然后,您可以使用以下技巧在编译文档时动态设置客户 :

pdflatex -jobname=main "\def\customer{customer1}\input{main}"

使用上述文件将生成一个 PDF 文件main.pdf

在此处输入图片描述

类似地,命令

pdflatex -jobname=main "\def\customer{customer2}\input{main}"

将产生“相同”文档的变体customer2

在此处输入图片描述

顺便说一句,你也可以使用类似

pdflatex -jobname=main-customer2 "\def\customer{customer2}\input{main}"

生成自定义的 PDF 文件名main-customer2.pdf,或任何您喜欢的名称。

在上面的例子中,我使用了颜色和条件,\ifPaying因为这些特征在问题中提到过,但这个例子有点牵强,我可能不会在实践中使用这样的代码(例如,\ifPaying我可能会\iscsdef{accountNumber}使用电子工具箱包)。请考虑添加最小工作示例回答你的问题以更好地说明你真正想要的。

转换为 HTML 可能会有问题。如果您的文档“不太复杂”,这应该很简单,但复杂的文档总是更难转换。无论哪种方式,我建议从 LaTeX 使用tex4ht。这是高度可配置的,几乎肯定可以做你想做的事,但高度可配置的另一面是你需要学习如何配置它。使用类似 sphinx 的东西,如评论中所建议的那样,或者编写代码来动态生成 latex 或 html 输出可能是更好的方法。如果没有更具体的细节说明你需要什么、你的客户数据是什么样子以及如何存储和访问它,就不可能推荐任何特定的方法。

相关内容