Я думаю о создании пакета, который предоставляет среду, использующую 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-искусстве, должен быть пропорциональным. Под «пропорциональным» я подразумеваю, что каждый символ имеет разную ширину. Чтобы проиллюстрировать проблему существующего замечательного ответа, мне пришлось бы включить некоторые внешние ссылки на изображения.
Это мой основной Tex-файл, используемый для набора образца ASCII-арта:
\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
команду, так как она глобально изменяет шрифт, используемый для\verb
-type текста. Вместо этого я определяю\newfontfamily
и использую его локально только для вашей среды. - Поскольку предполагается, что это пакет, всегда желательно добавлять к макросам, специфичным для пакета, префикс package-name, например,
\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
— нет. К тому же он не бесплатный (в смысле свободы). Найдите бесплатную альтернативу и используйте ее.