So erstellen Sie eine Box mit fester Höhe und Breite und benutzerdefinierter Polsterung

So erstellen Sie eine Box mit fester Höhe und Breite und benutzerdefinierter Polsterung

Ich bin neu bei Latex und versuche, die Ausgabe des TI84-Rechners in mein Dokument einzubinden.

Es soll so aussehen:

aktueller TI 84

Folgendes kann ich machen.

mein Texas-Rechner

Die Höhe und Breite meiner Ausgabe ordnen sich von selbst. Ich möchte eine feste Höhe/Breite mit benutzerdefinierter Polsterung und Textumbruch innerhalb des Felds. Für jede Hilfe bin ich sehr dankbar.

Mein Code ist

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

Antwort1

Die \vbox to...primitive Konstruktion ist die Antwort auf Ihre Frage. Sie können den folgenden Code ausprobieren:

\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|
}

Bearbeiten:Meine zweite Version des Makros \ticalcimplementiert den automatischen Umbruch. Die Breite der Box muss mit setbox festgelegt werden. Siehe die Zeile, in \setbox0der 16 Zeichen angegeben werden. Der Text, der länger als diese Abmessung ist, wird umgebrochen. Der Umbruch ist zwischen jedem Zeichenpaar möglich.

Der optionale \resultText gefolgt von kann in den Parameter des \ticalcMakros aufgenommen werden. Dieser Text wird in der nächsten Zeile rechtsbündig gedruckt.

\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}

Antwort2

Die folgende Lösung übernimmt einen Teil des Codes von diesemgute Antwortvon egreg:

\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

Dadurch wird eine neue Umgebung definiert terminal, die den Text automatisch innerhalb des Felds umbricht.

Die Box besteht aus einem minipageInnengehäuse tcolorbox.

Dies ist der vollständige Code

\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} 

und das ist das Ergebnis:

Bildbeschreibung hier eingeben

Antwort3

Eine Variante von karlkoellers Antwort, bei der Breite, Höhe, Polsterung und Ausrichtung der Box anpassbar sind. Ausrichtung bezieht sich auf die vertikale Ausrichtung der Box in Bezug auf das umgebende Material.

Das Setup geht davon aus, dass im Feld eine nichtproportionale Schriftart verwendet wird. Ich habe „DejaVu Sans Mono“ verwendet, da ich nicht über die Schriftart „Texas Instruments TI-84 series“ verfüge. Ändern Sie einfach die Schriftart in der \newfontfamilyZeile.

Standardwerte:

  • Höhe: 8 (Zeilen)
  • Breite: 16 (Zeichen)
  • Polsterung: 1pt
  • ausrichten: c

Mögliche Werte für alignsind c, tund b.

Sie können die Werte mit einer Schlüssel-Wert-Schnittstelle im optionalen Argument wie terminalgezeigt festlegen.

\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} 

Stattdessen \fboxkönnte man die ausgefalleneren Methoden von verwenden tcolorbox.

Bildbeschreibung hier eingeben

verwandte Informationen