技術的な詳細

技術的な詳細

モノフォントのアンダースコアの問題に苦労しています。他の記号よりも短いようです。例:

\documentclass{article}

\begin{document}
\ttfamily
Test \\
.------------.-------------.--------------.\\
\ |\ abcdefghig\ |\ klmnopqrstu\ |\ vwxyzabcdefg\ | \\
.------------.-------------.--------------.\\
\ |\ abc[e]ghig\ |\ klm[o]qrstu\ |\ vwxyza[c]efg\ | \\
.------------.-------------.--------------.\\
\ |\ dfi\_cke[x]\ |\ dfi\_cs\_n[x]\ |\ dfi\_act\_n[x]\ | \\
.------------.-------------.--------------.
\end{document}

結果:

結果

ご覧のとおり、最後の行(アンダースコア付き)は左にシフトされています。

PSいいえ、ネイティブテーブルは使用できません。これはユーザーが作成したもので、そのまま挿入する必要があります。PSSはverbatim内部では機能しないため、オプションではありません。multicolumn

答え1

の代わりに\_、以下を使用できます\string_:

ここに画像の説明を入力してください

\documentclass{article}

\begin{document}

\ttfamily
Test \\
.------------.-------------.--------------.\\
\ |\ abcdefghig\ |\ klmnopqrstu\ |\ vwxyzabcdefg\ | \\
.------------.-------------.--------------.\\
\ |\ abc[e]ghig\ |\ klm[o]qrstu\ |\ vwxyza[c]efg\ | \\
.------------.-------------.--------------.\\
\ |\ dfi\string_cke[x]\ |\ dfi\string_cs\string_n[x]\ |\ dfi\string_act\string_n[x]\ | \\
.------------.-------------.--------------.

\end{document}

答え2

最も自然な方法は、verbatim(下記参照) を使用することです。しかし、まず何が起こるかを少し説明しましょう。

OT1エンコーディングでは\textunderscore\_に依存する は、ルールを使用して偽装されます (現在のフォントの文字ではありません)。T1を追加してエンコーディングに切り替えると、 で選択されたフォントの実際の文字が使用され\usepackage[T1]{fontenc}ます。\_\ttfamily

\documentclass{article}
\usepackage[T1]{fontenc}

\begin{document}
\ttfamily
Test \\
.------------.-------------.--------------.\\
\ |\ abcdefghig\ |\ klmnopqrstu\ |\ vwxyzabcdefg\ | \\
.------------.-------------.--------------.\\
\ |\ abc[e]ghig\ |\ klm[o]qrstu\ |\ vwxyza[c]efg\ | \\
.------------.-------------.--------------.\\
\ |\ dfi\_cke[x]\ |\ dfi\_cs\_n[x]\ |\ dfi\_act\_n[x]\ | \\
.------------.-------------.--------------.
\end{document}

ここに画像の説明を入力してください

アンダースコアは、他の文字と同じサイズになりました。ただし、Barbara Beeton が指摘したように、非逐語モードでは、連続するハイフンは合字 (en ダッシュは--、em ダッシュは---) に結合されます。合字をオフにすると (これが機能の 1 つですverbatim)、すべての行が期待どおりの長さになります。

\documentclass{article}
\usepackage[T1]{fontenc}

\begin{document}

\begingroup
\ttfamily\makeatletter\@noligs\makeatother
Test \\
.------------.-------------.--------------.\\
\ |\ abcdefghig\ |\ klmnopqrstu\ |\ vwxyzabcdefg\ | \\
.------------.-------------.--------------.\\
\ |\ abc[e]ghig\ |\ klm[o]qrstu\ |\ vwxyza[c]efg\ | \\
.------------.-------------.--------------.\\
\ |\ dfi\_cke[x]\ |\ dfi\_cs\_n[x]\ |\ dfi\_act\_n[x]\ | \\
.------------.-------------.--------------.
\endgroup

\end{document}

ここに画像の説明を入力してください

しかし実際には、verbatimこのような状況では を使用する方が自然です。上記の例は、舞台裏で何が起きているのか理解しやすくするためのものでした。したがって、ここで私が行うことは次のようになります。

\documentclass{article}
\usepackage[T1]{fontenc}

\begin{document}

\begin{verbatim}
Test
.-------------.-------------.--------------.
 | abcdefghig | klmnopqrstu | vwxyzabcdefg |
.-------------.-------------.--------------.
 | abc[e]ghig | klm[o]qrstu | vwxyza[c]efg |
.-------------.-------------.--------------.
 | dfi_cke[x] | dfi_cs_n[x] | dfi_act_n[x] |
.-------------.-------------.--------------.
\end{verbatim}

\end{document}

逐語的に

「Test」はverbatim環境内にあるため、この場合は段落のインデントは行われないことに注意してください。

技術的な詳細

興味のある方のために、で得られる エンコーディング\textunderscoreでのの実装は次のようになります。OT1\tracingmacros=1\tracingonline=1

\leavevmode \kern .06em\vbox{\hrule width .3em}

一方、T1エンコードでは、最終的には単純になります\char"5F(つまり、現在のフォントの 16 進コード 5F の文字を含む文字ボックスを現在のリストに追加するコマンド)。

答え3

私が使うのはverbatim:

ここに画像の説明を入力してください

\documentclass{article}
\begin{document}
\begin{verbatim}
   Test
.------------.-------------.--------------.
| abcdefghig | klmnopqrstu | vwxyzabcdefg | 
.------------.-------------.--------------.
| abc[e]ghig | klm[o]qrstu | vwxyza[c]efg | 
.------------.-------------.--------------.
| dfi_cke[x] | dfi_cs_n[x] | dfi_act_n[x] | 
.------------.-------------.--------------.
\end{verbatim}
\end{document}

関連情報