Ich gestalte Vorlesungsmitschriften für einen Universitätskurs neu, da die Studenten die Mitschriften auf ihren Tablets, E-Book-Readern usw. lesen wollten.
Ich habe Codeblöcke in diesen Dokumenten, die in den Umgebungen cdblk
und definiert sind codeblocks
. Die codeblocks
Umgebung ist eine verbatim
Umgebung, während cdblk
dies nicht der Fall ist, aber ich brauche sie beide, da beispielsweise \textquotesingle
in wörtlich nicht korrekt angezeigt wird (das ist, wofür ich cdblk
es verwende).
\paper
Ich habe auch einen Schlüssel in der Präambel der A4-Papierversion des Dokuments definiert , während ich in den Tablet-Versionen einen \tablet
Schlüssel definiert habe. Ich habe auch zwei Befehle \ifpaper{}
und \iftablet{}
einen Tex-Code für Papier und Tablet.
Ich möchte die Schriftgröße wie oben angegeben anpassen cdblk
und codeblock
Umgebungen einrichten, wenn eine kleine Papiergröße ( \iftablet{}
) verwendet wird, wie im MWE unten.
Folgendes habe ich bisher versucht, aber nichts davon funktioniert:
cdblk
Ich habe versucht, Adjustbox und Umgebungen zu verwendencodeblock
, aber es ist ein Fehler aufgetreten.! Missing \endgroup inserted. <inserted text> \endgroup l.61 \begin{codeblock}
Ich habe versucht, die Verkleinerung von Monospace-Schriftarten mit einzustellen
microtype
, aber es scheint keine Wirkung zu haben. (Im MWE unten enthalten.)\SetExpansion[shrink=100]{family=tt*}{}
Ich habe versucht, in der Präambel mit und unterschiedliche Schriftgrößenumgebungen
cdblk
für die Papier- und Tablet-Versionen zu definieren. Beim Kompilieren des Dokuments bemerkt der Compiler diese Definitionen jedoch nicht und denkt daher, dass die Umgebung nicht definiert sei.\ifpaper{}
\iftablet{}
Bei der kleinsten von mir verwendeten Papiergröße (verwendet im MWE) sollten mindestens 72 Zeichen in die Umgebungen passen cdblk
. codeblock
Natürlich wären 80 Zeichen besser, aber ich brauche mindestens 72.
Hier ist ein Beispiel für ein minimal funktionierendes Beispiel:
\documentclass[10pt, titlepage]{article}
%\def\paper{1}
\def\tablet{1}
\usepackage[nohead,%
nofoot,%
nomarginpar,%
paperwidth=106.68mm,%
paperheight=142.24mm,%
tmargin=2.5mm,%
rmargin=2.5mm,%
bmargin=2.5mm,%
lmargin=2.5mm,
vscale=1,%
hscale=1]{geometry}
%\usepackage[a4paper]{geometry}
%\usepackage[headings]{fullpage}
\newcommand{\ifpaper}[1]{\ifx\paper\undefined\else{#1}\fi}
\newcommand{\iftablet}[1]{\ifx\tablet\undefined\else{#1}\fi}
\usepackage[cmyk, pdftex]{xcolor}
\definecolor{PMS420}{cmyk}{0, 0, 0, 0.15}
\usepackage[protrusion=true,%
expansion=true]{microtype}
\SetExpansion[shrink=100]{family=tt*}{}
\usepackage{verbatim}
\usepackage[framemethod=tikz,%
innerleftmargin=\parindent,%
skipabove=0.4\baselineskip,%
skipbelow=0.4\baselineskip,%
innertopmargin=0.4\baselineskip,%
innerbottommargin=0.4\baselineskip]{mdframed}
\newmdenv[linewidth=0pt,%
linecolor=PMS420,%
backgroundcolor=PMS420,%
settings={\setlength{\parindent}{0pt}}]{cdblk}
\newenvironment{codeblock}{\endgraf\verbatim}{\endverbatim}
\BeforeBeginEnvironment{codeblock}{\begin{cdblk}}
\AfterEndEnvironment{codeblock}{\end{cdblk}}
\pagestyle{empty}
\begin{document}
\begin{cdblk}
\verb+80 characters should fit in one line+
\end{cdblk}
\begin{codeblock}
80 characters should fit in one line
\end{codeblock}
\end{document}
Antwort1
Eine Möglichkeit hierfür wäre, eine neue Bedingung zu erstellen und dann dem Einstellungsschlüssel Ihrer einen Schriftgrößenschalter hinzuzufügen newmdenv
.
\newif\ifsmall
\smalltrue % we want small sizes
%\smallfalse % uncomment to turn off small sizes
\newmdenv[linewidth=0pt, linecolor=PMS420, backgroundcolor=PMS420,%
settings={\ifsmall\fontsize{6pt}{7pt}\selectfont\fi\setlength{\parindent}{0pt}}]{cdblk}
Antwort2
\documentclass[10pt, titlepage]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{microtype}
\newcommand*\verbfont{%
\fontfamily{lmtt}\fontseries{lc}\fontshape{n}\selectfont%
\SetTracking{encoding=*}{-50}\lsstyle}
%\def\paper{1}
\def\tablet{1}
\usepackage[nohead,%
nofoot,%
nomarginpar,%
paperwidth=106.68mm,%
paperheight=142.24mm,%
tmargin=2.5mm,%
rmargin=2.5mm,%
bmargin=2.5mm,%
lmargin=2.5mm,
vscale=1,%
hscale=1]{geometry}
%\usepackage[a4paper]{geometry}
%\usepackage[headings]{fullpage}
\newcommand{\ifpaper}[1]{\ifx\paper\undefined\else{#1}\fi}
\newcommand{\iftablet}[1]{\ifx\tablet\undefined\else{#1}\fi}
\usepackage[cmyk, pdftex]{xcolor}
\definecolor{PMS420}{cmyk}{0, 0, 0, 0.15}
\usepackage{verbatim}
\makeatletter
\def\verbatim@font{\verbfont\setbox0=\hbox{1}\fontdimen2\font=\the\wd0}
\makeatother
\usepackage[framemethod=tikz,%
innerleftmargin=\parindent,%
skipabove=0.4\baselineskip,%
skipbelow=0.4\baselineskip,%
innertopmargin=0.4\baselineskip,%
innerbottommargin=0.4\baselineskip]{mdframed}
\newmdenv[linewidth=0pt,%
linecolor=PMS420,%
backgroundcolor=PMS420,%
settings={\setlength{\parindent}{0pt}}]{cdblk}
\newenvironment{codeblock}{\endgraf\verbatim}{\endverbatim}
\BeforeBeginEnvironment{codeblock}{\begin{cdblk}}
\AfterEndEnvironment{codeblock}{\end{cdblk}}
\pagestyle{empty}
\begin{document}
\begin{cdblk}
\verb+80 characters should fit in one line+
\end{cdblk}
\begin{codeblock}
80 characters should fit in one line
01234567890123456789012345678901234567890123456789012345678901234567890123456789
\end{codeblock}
{\verbfont
01234567890123456789012345678901234567890123456789012345678901234567890123456789}
\ttfamily
01234567890123456789012345678901234567890123456789012345678901234567890123456789
\end{document}
Damit \fontdimen2\font
wird die Breite zwischen zwei Wörtern gesteuert. Sie muss auf die Breite eines Buchstabens der Mono-Schriftart eingestellt werden, z. B. die „1“, wie oben zu sehen.
Antwort3
Ich füge die Antwort hinzu, auf die egreg mich hingewiesen hat (Auflistungs-Schriftgröße, die auf 80 Spalten passt?). Das gefällt mir, weil die Schriftgröße entsprechend der Seitengröße (genauer gesagt ) ausgewählt wird. Ich kann es also für alle Papiergrößen verwenden, mit denen ich arbeite, und in unsere Umgebungen \textwidth
passen 80 Zeichen .cdblk
codeblock
Ich musste lediglich die Definition cdblk
von und durch Folgendes ersetzen:codeblock
\newlength{\eightytt}
\newcommand{\testthewidth}{%
\fontsize{\dimen0}{0}\selectfont%
\sbox0{x\global\dimen1=0.6em}%
\ifdim 73\dimen1>\textwidth%
\advance\dimen0 by -.1pt%
\expandafter\testthewidth%
\else%
\global\eightytt\dimen0%
\fi%
}
\AtBeginDocument{%
\dimen0=\csname f@size\endcsname pt%
\begingroup%
\ttfamily%
\testthewidth%
\endgroup%
\newmdenv[font=\fontsize{\eightytt}{1.2\eightytt}\ttfamily,%
linewidth=0pt,%
linecolor=PMS420,%
backgroundcolor=PMS420,%
settings={\setlength{\parindent}{0pt}}]{cdblk}
\newenvironment{codeblock}{\endgraf\verbatim}{\endverbatim}
\BeforeBeginEnvironment{codeblock}{\begin{cdblk}}
\AfterEndEnvironment{codeblock}{\end{cdblk}}
}
Vollständig funktionierendes Beispiel:
\documentclass[10pt, titlepage]{article}
%\def\paper{1}
\def\tablet{1}
\usepackage[nohead,%
nofoot,%
nomarginpar,%
paperwidth=106.68mm,%
paperheight=142.24mm,%
tmargin=2.5mm,%
rmargin=2.5mm,%
bmargin=2.5mm,%
lmargin=2.5mm,
vscale=1,%
hscale=1]{geometry}
%\usepackage[a4paper]{geometry}
%\usepackage[headings]{fullpage}
\newcommand{\ifpaper}[1]{\ifx\paper\undefined\else{#1}\fi}
\newcommand{\iftablet}[1]{\ifx\tablet\undefined\else{#1}\fi}
\usepackage[cmyk, pdftex]{xcolor}
\definecolor{PMS420}{cmyk}{0, 0, 0, 0.15}
\usepackage[protrusion=true,%
expansion=true]{microtype}
\SetExpansion[shrink=100]{family=tt*}{}
\usepackage{verbatim}
\usepackage[framemethod=tikz,%
innerleftmargin=\parindent,%
skipabove=0.4\baselineskip,%
skipbelow=0.4\baselineskip,%
innertopmargin=0.4\baselineskip,%
innerbottommargin=0.4\baselineskip]{mdframed}
\pagestyle{empty}
% egreg's solution:
\newlength{\eightytt}
\newcommand{\testthewidth}{%
\fontsize{\dimen0}{0}\selectfont%
\sbox0{x\global\dimen1=0.6em}%
\ifdim 73\dimen1>\textwidth%
\advance\dimen0 by -.1pt%
\expandafter\testthewidth%
\else%
\global\eightytt\dimen0%
\fi%
}
\AtBeginDocument{%
\dimen0=\csname f@size\endcsname pt%
\begingroup%
\ttfamily%
\testthewidth%
\endgroup%
\newmdenv[font=\fontsize{\eightytt}{1.2\eightytt}\ttfamily,%
linewidth=0pt,%
linecolor=PMS420,%
backgroundcolor=PMS420,%
settings={\setlength{\parindent}{0pt}}]{cdblk}
\newenvironment{codeblock}{\endgraf\verbatim}{\endverbatim}
\BeforeBeginEnvironment{codeblock}{\begin{cdblk}}
\AfterEndEnvironment{codeblock}{\end{cdblk}}
}
\begin{document}
\begin{cdblk}
\verb+80 characters should fit in one line+
\end{cdblk}
\begin{codeblock}
80 characters should fit in one line
\end{codeblock}
\end{document}