其他管理Tex选项| 通过 .NET 为 Python 提供 Aspose.TeX

以下示例生成 XPS 文件。请先应用 许可证,并将 ASPOSE_TEX_OUTPUT_DIR 设置为输出文件夹(默认为 output)。为每个示例使用单独的输出文件夹,以保留所有结果。

设置交互模式

如 在TEX交互中中提到的,aspose.tex for Python提供了设置发动机启动的初始交互模式的能力。这是如何完成的示例:

 1# Process a LaTeX document without interactive error prompts.
 2import os
 3from pathlib import Path
 4from io import BytesIO
 5from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 6from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 7from aspose.tex.presentation.xps import XpsDevice, XpsSaveOptions
 8
 9output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
10output_dir.mkdir(parents=True, exist_ok=True)
11
12options = TeXOptions.console_app_options(TeXConfig.object_latex)
13options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
14options.terminal_out = OutputMemoryTerminal()
15options.interaction = Interaction.NONSTOP_MODE
16save_options = XpsSaveOptions()
17options.save_options = save_options
18device = XpsDevice()
19source = r"\documentclass{article}\begin{document}Hello, World!\end{document}"
20with BytesIO(source.encode("ascii")) as stream:
21    result = TeXJob(stream, device, options).run()

设置作业名称

当将主要输入文件作为文件名提供时,结果输出文件将具有相同的名称,但具有不同的扩展名。 TEX引擎将输入文件的名称称为 作业名称,并将其用于输出文件。例外是具有明确指定文件名的辅助文件。但是,当主输入文件以 流为单位传递时,Tex引擎使用默认作业名称,即 texput。在这两种情况下,都可以通过分配适当的转换选项来覆盖作业名称。

 1# Override the output job name.
 2import os
 3from pathlib import Path
 4from io import BytesIO
 5from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 6from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 7from aspose.tex.presentation.xps import XpsDevice, XpsSaveOptions
 8
 9output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
10output_dir.mkdir(parents=True, exist_ok=True)
11
12options = TeXOptions.console_app_options(TeXConfig.object_latex)
13options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
14options.terminal_out = OutputMemoryTerminal()
15options.interaction = Interaction.NONSTOP_MODE
16save_options = XpsSaveOptions()
17options.job_name = "my-job-name"
18options.save_options = save_options
19device = XpsDevice()
20source = r"\documentclass{article}\begin{document}Hello, World!\end{document}"
21with BytesIO(source.encode("ascii")) as stream:
22    result = TeXJob(stream, device, options).run()

“停止时间”

要自动从序言中的某些定义中生成标题,乳胶提供了一个通常包括当前日期的功能。但是,在某些情况下,我们需要将日期修复到特定值。这是一种实现这一目标的方法:

 1# Fix the date used by LaTeX.
 2import os
 3from pathlib import Path
 4from io import BytesIO
 5from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 6from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 7from aspose.tex.presentation.xps import XpsDevice, XpsSaveOptions
 8
 9output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
10output_dir.mkdir(parents=True, exist_ok=True)
11
12options = TeXOptions.console_app_options(TeXConfig.object_latex)
13options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
14options.terminal_out = OutputMemoryTerminal()
15options.interaction = Interaction.NONSTOP_MODE
16save_options = XpsSaveOptions()
17from datetime import datetime
18options.date_time = datetime(2022, 12, 18)
19options.save_options = save_options
20device = XpsDevice()
21source = r"\documentclass{article}\begin{document}\today\end{document}"
22with BytesIO(source.encode("ascii")) as stream:
23    result = TeXJob(stream, device, options).run()

忽略丢失的软件包

如果我们有一个乳胶文件,其中包括对Python **库不支持的软件包的引用,则TEX引擎将遇到错误并在尝试加载这些软件包时停止。为了防止这种情况,我们可以利用以下选项:

 1# Skip an unavailable LaTeX package.
 2import os
 3from pathlib import Path
 4from io import BytesIO
 5from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 6from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 7from aspose.tex.presentation.xps import XpsDevice, XpsSaveOptions
 8
 9output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
10output_dir.mkdir(parents=True, exist_ok=True)
11
12options = TeXOptions.console_app_options(TeXConfig.object_latex)
13options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
14options.terminal_out = OutputMemoryTerminal()
15options.interaction = Interaction.NONSTOP_MODE
16save_options = XpsSaveOptions()
17options.ignore_missing_packages = True
18options.save_options = save_options
19device = XpsDevice()
20source = r"\documentclass{article}\usepackage{asposeexamplemissingpackage}\begin{document}Hello, World!\end{document}"
21with BytesIO(source.encode("ascii")) as stream:
22    result = TeXJob(stream, device, options).run()

如何避免建立连接

默认情况下,如果字体包含必要的数据,则TEX发动机为特定字符对构建了连接。但是,我们可以指示发动机使用以下代码绕过结扎的结构:

 1# Disable construction of typographic ligatures.
 2import os
 3from pathlib import Path
 4from io import BytesIO
 5from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 6from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 7from aspose.tex.presentation.xps import XpsDevice, XpsSaveOptions
 8
 9output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
10output_dir.mkdir(parents=True, exist_ok=True)
11
12options = TeXOptions.console_app_options(TeXConfig.object_latex)
13options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
14options.terminal_out = OutputMemoryTerminal()
15options.interaction = Interaction.NONSTOP_MODE
16save_options = XpsSaveOptions()
17options.no_ligatures = True
18options.save_options = save_options
19device = XpsDevice()
20source = r"\documentclass{article}\begin{document}office efficient affine\end{document}"
21with BytesIO(source.encode("ascii")) as stream:
22    result = TeXJob(stream, device, options).run()

重复工作

如 乳胶输入文件段落,标签和参考,在某些情况下,我们可能需要两次运行同一作业。这是一种实现这一目标的方法:

 1# Resolve a forward reference by repeating the job.
 2import os
 3from pathlib import Path
 4from io import BytesIO
 5from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 6from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 7from aspose.tex.presentation.xps import XpsDevice, XpsSaveOptions
 8
 9output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
10output_dir.mkdir(parents=True, exist_ok=True)
11
12options = TeXOptions.console_app_options(TeXConfig.object_latex)
13options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
14options.terminal_out = OutputMemoryTerminal()
15options.interaction = Interaction.NONSTOP_MODE
16save_options = XpsSaveOptions()
17options.repeat = True
18options.save_options = save_options
19device = XpsDevice()
20source = r"\documentclass{article}\begin{document}See Section \ref{sec:target}.\section{Target}\label{sec:target}\end{document}"
21with BytesIO(source.encode("ascii")) as stream:
22    result = TeXJob(stream, device, options).run()

将数学公式变成栅格图像

如果需要将数学公式转换为栅格图像而不是使用字体渲染,则可以将以下选项用于此目的:

 1# Render math formulas as raster images.
 2import os
 3from pathlib import Path
 4from io import BytesIO
 5from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 6from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 7from aspose.tex.presentation.xps import XpsDevice, XpsSaveOptions
 8
 9output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
10output_dir.mkdir(parents=True, exist_ok=True)
11
12options = TeXOptions.console_app_options(TeXConfig.object_latex)
13options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
14options.terminal_out = OutputMemoryTerminal()
15options.interaction = Interaction.NONSTOP_MODE
16save_options = XpsSaveOptions()
17save_options.rasterize_formulas = True
18options.save_options = save_options
19device = XpsDevice()
20source = r"\documentclass{article}\begin{document}Formula: $x^2+y^2=z^2$\end{document}"
21with BytesIO(source.encode("ascii")) as stream:
22    result = TeXJob(stream, device, options).run()

将图形变成栅格图像

Objecttex引擎提供了以栅格格式(例如PNG和JPG)以及PS(EPS)和XPS(OXPS)格式包含图形文件的功能。后两种格式通常包含向量元素和文本。如果我们想将它们栅格化并将其包含在固体图像中,我们可以使用以下选项:

 1# Rasterize an included vector EPS graphic.
 2import os
 3from pathlib import Path
 4from io import BytesIO
 5from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 6from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 7from aspose.tex.presentation.xps import XpsDevice, XpsSaveOptions
 8
 9output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
10output_dir.mkdir(parents=True, exist_ok=True)
11
12options = TeXOptions.console_app_options(TeXConfig.object_latex)
13options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
14options.terminal_out = OutputMemoryTerminal()
15options.interaction = Interaction.NONSTOP_MODE
16save_options = XpsSaveOptions()
17save_options.rasterize_included_graphics = True
18input_root = Path(os.environ.get("ASPOSE_TEX_INPUT_DIR", "input")).resolve()
19options.input_working_directory = InputFileSystemDirectory(str(input_root / "Typesetting"))
20options.save_options = save_options
21device = XpsDevice()
22source = r"\documentclass{article}\usepackage{graphicx}\begin{document}\includegraphics{triangle.eps}\end{document}"
23with BytesIO(source.encode("ascii")) as stream:
24    result = TeXJob(stream, device, options).run()

图形示例读取 ASPOSE_TEX_INPUT_DIR(默认为 input)下的 Typesetting/triangle.eps。准备资源时请保留此子目录结构。

子集字体

如果我们希望减少输出文件的大小,我们可以采用字体子集,而字体子集需要结果文档中的字体将不包括文档中不存在的字形的数据。这是实现这一目标的解决方案:

 1# Embed only the used font glyphs.
 2import os
 3from pathlib import Path
 4from io import BytesIO
 5from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 6from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 7from aspose.tex.presentation.xps import XpsDevice, XpsSaveOptions
 8
 9output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
10output_dir.mkdir(parents=True, exist_ok=True)
11
12options = TeXOptions.console_app_options(TeXConfig.object_latex)
13options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
14options.terminal_out = OutputMemoryTerminal()
15options.interaction = Interaction.NONSTOP_MODE
16save_options = XpsSaveOptions()
17save_options.subset_fonts = True
18options.save_options = save_options
19device = XpsDevice()
20source = r"\documentclass{article}\begin{document}Hello, World!\end{document}"
21with BytesIO(source.encode("ascii")) as stream:
22    result = TeXJob(stream, device, options).run()