Я новичок в Latex и пытаюсь включить вывод калькулятора TI84 в свой документ.
Предполагается, что это будет выглядеть так:
Вот что мне удалось сделать.
Высота и ширина моего вывода упорядочиваются сами, мне нужна фиксированная высота/ширина с пользовательским отступом и обтеканием текстом внутри блока. Любая помощь будет высоко оценена.
Мой код
{\scriptsize
\setmainfont{Texas Instruments TI-84 series}
\tabulinesep=0.05 in
\begin{tabu} to 1 in {|c |}
\hline
normalcdf(-1.5,2)\\
\hfill .9104427093
\\\hline
\end{tabu}
}
решение1
Примитивная \vbox to...
конструкция — это ответ на ваш вопрос. Вы можете попробовать следующий код:
\def\tifont{\setmainfont{Texas Instruments TI-84 series}}
\setbox0=\hbox{\tifont 12345678901234567\kern2pt}\edef\tiwidth{\wd0}
\def\ticalc#1{\hbox{\vrule\vbox to2cm{\hrule\kern1pt
\def\l##1|{\hbox to\tiwidth{\kern1pt##1\kern1pt\hss}}\tifont #1\vss\hrule}\vrule}}
\ticalc{
\l normalcdf(-1.5,2)|
\l\hfill .9104427093|
}
Редактировать:Моя вторая версия макроса \ticalc
реализует автоперенос. Ширина поля должна быть установлена setbox. Смотрите строку, \setbox0
где предполагается 16 символов. Текст, длина которого больше этого размера, переносится. Перенос возможен между каждой парой символов.
\result
В параметр макроса можно включить необязательный текст, за которым следует текст \ticalc
. Такой текст печатается на следующей строке с выравниванием по правому краю.
\def\titext{\hsize=\tiwidth \leftskip=1pt\rightskip=1pt plus1fil \tifont \noindent \titextA}
\def\titextA{\futurelet\next\titextB}
\def\titextB{\ifx\next\result \else \null\next \penalty0 \expandafter\titextC \fi}
\def\titextC{\afterassignment\titextA \let\next= }
\newfontfamily\tifont{Texas Instruments TI-84 series}
\setbox0=\hbox{\tifont 1234567890123456\kern2pt}\edef\tiwidth{\wd0}
\def\ticalc#1{\hbox{\vrule\vbox to2cm{\hrule\kern1pt\titext#1\result\relax\vss\hrule}\vrule}}
\def\result#1\relax{\par\let\result=\relax \hbox to\tiwidth{\hss#1\kern1pt}}
\ticalc{normalcdf(-1.5,2)\result .9104427093}
\ticalc{abcdefghijklmnopqrsyuyu}
решение2
Следующее решение заимствует часть кода отсюдаотличный ответиз эгрега:
\ExplSyntaxOn
\NewEnviron{terminal}
{
\raggedright\varun_zerohyphen:V \BODY
}
\seq_new:N \l_varun_body_seq
\cs_new_protected:Npn \varun_zerohyphen:n #1
{
\seq_set_split:Nnn \l_varun_body_seq { ~ } { #1 }
\seq_map_inline:Nn \l_varun_body_seq { \varun_printword:n { ##1 } }
}
\cs_generate_variant:Nn \varun_zerohyphen:n { V}
\cs_new_protected:Npn \varun_printword:n #1
{
\tl_map_inline:nn { #1 } { ##1 \penalty0 \scan_stop: }
\c_space_tl
}
\ExplSyntaxOff
Это определяет новую среду terminal
, которая автоматически оборачивает текст внутри поля.
Коробка изготовлена через minipage
внутреннюю tcolorbox
среду.
Это полный код
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{amssymb}
\usepackage{fontspec}
\newfontfamily\TIfont{Texas Instruments TI-84 series}
% Start ----------- Code from https://tex.stackexchange.com/a/153692
\usepackage{xparse,environ}
\ExplSyntaxOn
\NewEnviron{terminal}
{
\raggedright\varun_zerohyphen:V \BODY
}
\seq_new:N \l_varun_body_seq
\cs_new_protected:Npn \varun_zerohyphen:n #1
{
\seq_set_split:Nnn \l_varun_body_seq { ~ } { #1 }
\seq_map_inline:Nn \l_varun_body_seq { \varun_printword:n { ##1 } }
}
\cs_generate_variant:Nn \varun_zerohyphen:n { V}
\cs_new_protected:Npn \varun_printword:n #1
{
\tl_map_inline:nn { #1 } { ##1 \penalty0 \scan_stop: }
\c_space_tl
}
\ExplSyntaxOff
% End ----------- Code from https://tex.stackexchange.com/a/153692
\begin{document}
{\scriptsize
\TIfont
\begin{tcolorbox}[%
arc=0pt,
outer arc=0pt,
boxsep=1pt,
top=0mm,
bottom=10mm,
left=0mm,
right=0mm,
boxrule=0.3pt,
colback=white,
colframe=black,
hbox
]
\begin{minipage}{1.14in}
\begin{terminal}
normalcdf(-1.5,2)\par
\hfill .9104427093\par
$\blacksquare$\par
\end{terminal}
\end{minipage}
\end{tcolorbox}
}
\end{document}
и вот результат:
решение3
Вариант ответа Карлкёллера, где ширина, высота, отступы и выравнивание коробки настраиваются. Выравнивание относится к вертикальному выравниванию коробки относительно окружающего материала.
Настройка предполагает, что в поле используется моноширинный шрифт; я использовал «DejaVu Sans Mono», поскольку у меня нет шрифта «Texas Instruments TI-84 series»; просто измените шрифт в строке \newfontfamily
.
Значения по умолчанию:
- высота: 8 (строк)
- ширина: 16 (символов)
- отступ: 1pt
- выравнивание: c
Возможные значения align
: c
, t
и b
.
Значения можно задать с помощью интерфейса «ключ-значение» в необязательном аргументе, как terminal
показано ниже.
\documentclass{article}
\usepackage{amssymb}
\usepackage{xparse,environ}
\usepackage{fontspec}
\newfontfamily\TI{DejaVu Sans Mono} % or whatever
\ExplSyntaxOn
\NewEnviron{terminal}[1][]
{
\scriptsize\TI
\keys_set:nn { varun/display } { width=16 , #1 }
\fbox
{
\parbox
[\l_varun_align_tl] % outer alignment
[\l_varun_height_int \baselineskip] % height
[t] % inner alignment
{\l_varun_width_dim} % width
{
\raggedright % don't try filling up lines
\varun_zerohyphen:V \BODY
}
}
}
\seq_new:N \l_varun_body_seq
\dim_new:N \l_varun_width_dim
\cs_new_protected:Npn \varun_zerohyphen:n #1
{
\seq_set_split:Nnn \l_varun_body_seq { ~ } { #1 }
\seq_map_inline:Nn \l_varun_body_seq { \varun_printword:n { ##1 } }
}
\cs_generate_variant:Nn \varun_zerohyphen:n { V }
\cs_new_protected:Npn \varun_printword:n #1
{
\tl_map_inline:nn { #1 } { ##1 \penalty\c_zero }
\c_space_tl
}
\cs_new_protected:Npn \__varun_set_width:n #1
{
\hbox_set:Nn \l_tmpa_box { \prg_replicate:nn { #1 } { A } }
\dim_set_eq:NN \l_varun_width_dim \box_wd:N \l_tmpa_box
}
\keys_define:nn { varun/display }
{
width .code:n = \__varun_set_width:n { #1 },
padding .code:n = \dim_set:Nn \fboxsep { #1 },
padding .initial:n = 1pt,
height .int_set:N = \l_varun_height_int,
height .initial:n = 8,
align .tl_set:N = \l_varun_align_tl,
align .initial:n = c,
}
\ExplSyntaxOff
\begin{document}
\begin{terminal}
normalcdf(-1.5,2)\\
\hfill .9104427093\\
1\\
2\\
3\\
4\\
▪
\end{terminal}\qquad
\begin{terminal}[width=20]
normalcdf(-1.5,2)\\
\hfill .9104427093\\
▪
\end{terminal}
\bigskip
\begin{terminal}[align=t]
normalcdf(-1.5,2)\\
\hfill .9104427093\\
▪
\end{terminal}\qquad
\begin{terminal}[align=t,height=4]
normalcdf(-1.5,2)\\
\hfill .9104427093\\
▪
\end{terminal}\qquad
\begin{terminal}[align=t,height=4,padding=6pt]
normalcdf(-1.5,2)\\
\hfill .9104427093\\
▪
\end{terminal}
\end{document}
Вместо \fbox
этого можно было бы использовать более изощренные методы, предоставляемые tcolorbox
.