![カスタム(逐語的)環境で等幅フォントを縮小する](https://rvso.com/image/281583/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%EF%BC%88%E9%80%90%E8%AA%9E%E7%9A%84%EF%BC%89%E7%92%B0%E5%A2%83%E3%81%A7%E7%AD%89%E5%B9%85%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%92%E7%B8%AE%E5%B0%8F%E3%81%99%E3%82%8B.png)
学生がタブレットや電子書籍リーダーなどでノートを読みたいと希望したため、大学の授業の講義ノートを再設計しています。
cdblk
これらのドキュメントには、および環境で定義されたコード ブロックがありますcodeblocks
。codeblocks
環境は環境ですverbatim
が、は環境cdblk
ではありません。ただし、たとえば は\textquotesingle
verbatim (私が使用したもの) では正しく表示されないため、両方が必要ですcdblk
。
\paper
また、A4 用紙バージョンのドキュメントのプリアンブルにキーを定義し、タブレット バージョンではキーを定義しました。また、紙とタブレット固有の TEX コード用に\tablet
2 つのコマンドがあります。\ifpaper{}
\iftablet{}
下記のMWEのように小さい用紙サイズ( )を使用する場合は、上記のフォントサイズcdblk
と環境を調整したいと思います。codeblock
\iftablet{}
これまで試したことは次のとおりですが、どちらも機能しません。
cdblk
周囲や環境で調整ボックスを使用しようとしましたcodeblock
が、エラーが発生しました。! Missing \endgroup inserted. <inserted text> \endgroup l.61 \begin{codeblock}
で等幅フォントの縮小を設定してみました
microtype
が、効果がないようです。(以下の MWE に含まれています。)\SetExpansion[shrink=100]{family=tt*}{}
cdblk
と を使用して、プリアンブルで紙バージョンとタブレット バージョンに異なるフォント サイズ環境を定義しようとしました\ifpaper{}
が\iftablet{}
、ドキュメントをコンパイルするときにコンパイラはそれらの定義に気付かないため、環境が定義されていないと認識します。
私が使用している最小の用紙サイズ (MWE で使用) では、少なくとも 72 文字が および 環境に収まるはずですcdblk
。もちろん、80 文字が収まる方が望ましいですが、少なくとも 72 文字は必要です。codeblock
以下に最小限の動作例を示します。
\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}
答え1
これを行う 1 つの方法は、新しい条件を作成し、の設定キーにフォント サイズ スイッチを追加することです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}
答え2
\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}
2 つの単語間の幅を制御\fontdimen2\font
します。モノ フォントの文字の幅 (上記の「1」など) に設定する必要があります。
答え3
egreg が教えてくれた答えを追加します (80 列に適合するリストのフォント サイズは?)。ページ サイズに応じてフォント サイズが選択されるため (より正確には まで)、使用するすべての用紙サイズでこれを使用でき、結果としてまたは環境\textwidth
に 80 文字が収まるため、この機能が気に入っています。cdblk
codeblock
私がしなければならなかったのはcdblk
、 と の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}}
}
完全に動作する例:
\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}