Как создать блок фиксированной высоты и ширины с пользовательскими отступами

Как создать блок фиксированной высоты и ширины с пользовательскими отступами

Я новичок в Latex и пытаюсь включить вывод калькулятора TI84 в свой документ.

Предполагается, что это будет выглядеть так:

фактический ТИ 84

Вот что мне удалось сделать.

мой техасский калькулятор

Высота и ширина моего вывода упорядочиваются сами, мне нужна фиксированная высота/ширина с пользовательским отступом и обтеканием текстом внутри блока. Любая помощь будет высоко оценена.

Мой код

{\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.

введите описание изображения здесь

Связанный контент