我正在考虑创建一个包,它提供了一个使用 MS PGothic 排版一些精美的日语 ASCII 艺术的环境。MS PGothic 是日语 ASCII 艺术的默认字体。
我的想法是创建一个新的 verbatim 环境。但看起来 verbatim 要求字体是等宽的,而 MS PGothic 是成比例的,字体也必须是成比例的才能排版日文 ASCII 艺术。
我尝试通过收集到的信息来创建一些包。其中一个是这样的:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{jart}[2023/03/05 Japanese ASCII Art]
\RequirePackage{fancyvrb}
% Set the font to MS PGothic
\usepackage{fontspec}
\setmonofont{msgothic.ttc}
% Set character width and line height
\fvset{fontsize=\small,xleftmargin=2em,}
\def\num{18}
\def\px{16}
% Define the "jart" environment
\DefineVerbatimEnvironment{jart}{Verbatim}
{fontfamily=tt,numbers=none,framesep=0.5em,rulecolor=white,baselinestretch=\num/\px}
但它不起作用。我认为我的包中存在一些我没有发现的基本错误。
如果有人能阐明这个问题,我将不胜感激。我有一本《Latex Companion 2ed》,希望有人能指导我该读哪一章。
正确排版的 ASCII 艺术示例可见此处:https://aahub.org/ 提前谢谢。
-
编辑1:感谢 Niranjan 的回答,这个问题几乎解决了。我提到,日语 ASCII 艺术中使用的字体必须是成比例的。“成比例”是指每个字符都有不同的宽度。为了说明现有精彩答案的问题,我必须包含一些外部图像链接。
这是我用来排版示例 ASCII 艺术的主要 Tex 文件:
\documentclass{article}
\usepackage{jart}
\begin{document}
First document. This is a simple example, with no
extra parameters or packages included.
\begin{jart}
______
,、.- '''"´ ` ' ‐ 、,
,、 ''" `' .、
,、 '" ....................... \
/ ..........::::::::::::::::::::::::::::::::::::::::::::::....... ... ヽ
/ ....:::::::::::::::;;::::::::::::::::;:::;、r'" \:::::::::::::::::.....::.. ヽ
. / ..::::::::::::::::::::/ `ヽ,:/ノ \ィ'ヽ:::::::::::::::.. ヽ
. / ..:::::::::::::::::::;、:ィ' ` ヽ ヽ \:::::::::::::.. ',
, ' ..:::::::::::::::;、r':/,' ..... ヽ ヽ::::::::::.. ',
. , ' ..::::::::::;、 '" / ,' / ,、-ヽ ', ヽ::::::::.. /
/ ..::::::::/ / ,' // ヽ. ヽ ヽ ', ヽ::::::::/
/ ...::::::::/ / ; / ヽ ヽ ヽ 丶 ', ヽ/
/ ..::::::::::::i゙ / ,' i ヽ ヾ、 ヽ \', ',
. / ....:::::::::::::::::i../ ,、 ,' | ,.、----- 、, ', ',.\ ヾ' 、ヽ ',
/ ..:::::::::::::::::::::/ ,、 '" ,' |´ ', !. ‐ヽ ヽ ヾ 、 ',
/ ....::::::::::::::::::::::/ ,、 '".--、i //!. | ', l ヽ. ',、. ', ` 、 ',
\::::::::::::::::::::/ ,、 '" / ,r''''''|〃 | |,.|ィ===ミ、 ', |, -ノ-、 /‐! | \ ',
`' 、:.:/ ,、 '" |. │ ! /~| l ', lノ===ミ、 /l | | \
,、r'ィ"‐-:、;;;_| ヽ ヽ、| i ',\\\ { l i lヽ !
´ ,' \ l .',、'、 , \\\!| l ! ' ,ヽ !
/ ` l ',ヽヽ |!| ヽ .| ',.ヽ!
. / l ! `ヽ 、_..-、_, /.ハ. V ',
/ ,、 -', ',‐‐―┐ / / | ',
, ' ,、- '''´ ', ', |. ィ ´ / |ー-、 ',
/ l ', ', ト> ‐ <´_! / / / ',
/ ', ', ', ├---゙ニi゙、.,,,,,{ / / / |\ ',
/ / ヽ ', ',│ || || ||ヽ / ト, | ヽ ヽ
'" / > ', ',ヽ. || || ||:} / | l. l ヽ '
\end{jart}
\end{document}
如果排版正确,我的 tex 文件中使用的相同艺术作品将如下所示:
你可以看到,字符都在那里,但是比例不对。一些字符被加宽了,将其他字符推向了右侧。
通过检查生成的 PDF,似乎每个字符的宽度都固定为全角和半角。我希望我清楚地描述了这个问题。
-
编辑 2:使用其他字体也可以,例如aahub
此处提供的字体:https://fonts.aahub.org/
答案1
我认为这将是做你想做的更安全的方法:
\ProvidesPackage{jart}[2023/03/06 Japanese ASCII Art]
\RequirePackage{fancyvrb}
\usepackage{fontspec}
\newfontfamily\verbatimfont[%
NFSSFamily = {myverbatimfont}%
]{msgothic.ttc}
\fvset{fontsize=\small,xleftmargin=2em}
\def\jart@num{18}
\def\jart@px{16}
\DefineVerbatimEnvironment{jart}{Verbatim}{%
fontfamily=myverbatimfont,%
numbers=none,%
framesep=0.5em,%
rulecolor=white,%
baselinestretch=\numexpr\jart@num/\jart@px\relax
}
- 我没有使用该
\setmonofont
命令,因为它会全局更改用于 -type 文本的字体\verb
。相反,我定义一个\newfontfamily
并仅在您的环境中本地使用它。 - 由于这应该是一个包,因此始终建议在特定于包的宏前面加上包名称,例如,
\jartnum
而不是仅仅\num
。我们总是让包宏越来越具体,以适应最终用户。基本上,它为他们提供了更多的自由,因为现在任何人都可以\def\num{some-interesting-definition}
在他们的文档中使用,而且这不会改变任何东西,jart
因为我们专门有\jartnum
。 - 关于
@
符号:在“内部”宏中,即仅由包需要的宏,我们还会在宏中的某个位置添加“@”符号,通常在包名称前缀之后。所以\jartnum
我用的是\jart@num
。现在,即使某些用户试图\jart@num
在他们的代码中重新定义,LaTeX 也不会接受它。他们必须使用特殊命令\makeatletter
才能重新定义它。这基本上使您的代码对包和最终用户都更安全,并且编码变得更加自由。 - 与某些编程语言不同,您无法在 LaTeX 中即时进行数学运算。您必须启动计算,而 LaTeX 对此有
\numexpr
。我们使用内部宏定义值,然后像\numexpr
代码中看到的那样对它们进行计算。 \NeedsTeXFormat{LaTeX2e}
现在你不再需要这条线了。
PS:与您的代码无关,但由于您计划发布软件包,请尝试使用随 TeX Live 一起分发的字体。您的msgothic.ttc
不是。而且它不是免费的(如自由)。寻找免费的替代方案并使用它。