
私はミアマ短い(数行)手書きのテキストをシミュレートするフォントです。フォントが薄いので、スティーブン・B・セグレテス解決策 カスタムカリグラフィテキストを太字にする方法
- 問題は、引数
\BODY
として与える\calbf
と、すべての改行が取り込まれてしまうことです。(ただし、ドイツ語のウムラウトなどを含む UTF-8 文字は適切に処理されます)。これは miama フォントとは関係ありません。miama フォントがなくても、改行は影響を受けます。 \calbf
また、最後の(コメントアウトされた)行に示されているように呼び出すと、次のエラーが発生するという事実についても疑問に思います。! パッケージ inputenc エラー: 無効な UTF-8 バイト シーケンスです。
説明については、inputenc パッケージのドキュメントを参照してください。すぐにヘルプを表示するには、H と入力してください。...
l.61 ...á é ó í ú \ldots \"e \"i \"a \"o \"u} ここにコードを入力してください
誰か、(特に)問題 1 の処理方法を教えてくれませんか?
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{environ}
\usepackage[scale=1]{miama}
\usepackage{stackengine}
\def\useanchorwidth{T}
\def\stacktype{L}
\def\stackalignment{l}
\def\calup{.2pt}
\def\calover{.15pt}
\def\calbf#1{\calbfhelpA#1 \relax\relax}
\def\calbfhelpA#1 #2\relax{%
\calbfhelpB#1\relax\relax%
\ifx\relax#2\else\ \calbfhelpA#2\relax\fi
}
\def\calbfhelpB#1#2\relax{%
\stackon[\calup]{#1}{\kern\calover#1}%
\ifx\relax#2\else
\calbfhelpB#2\relax%
\fi
}
\NewEnviron{MyCal}%
{%
\fmmfamily%
\noindent%
\calbf{Test0}\\ \BODY \\\\ \calbf{\BODY}%
}
\begin{document}
\def\calup{.3pt}
\def\calover{.3pt}
\begin{MyCal}
MyCal:\\
Test1: ä.ö.ü.Ä.Ö.Ü.ß.\ss.
\par
á é ó í ú
\"e \"i \"a \"o \"u
\end{MyCal}
\par\vspace{1em}
%\calbf{ä.ö.ü.Ä.Ö.Ü.ß.\ss \ldots á é ó í ú \ldots \"e \"i \"a \"o \"u}
\end{document}
答え1
問題 1 についてはこれを試してください。問題 2 については十分に理解していないため、解決できません。
主な問題は、 のオリジナル バージョンでは\calbf
拡張がまったく処理されなかったことです。 そのため、 は\calbf
単一のトークンを見て\BODY
、それをそのまま渡して と出力しました。が にトークンを 1 つずつ渡そうとする\stackon[\calup]{\BODY}{\kern\calover\BODY}
理由は、テキスト ブロック全体を渡すと改行が壊れるためだと考えられます。\calbf
\calup
そこで、 を の引数を展開するように変更すると役立ちます。の最初のトークンを再帰的に展開するトリックを\calbf
使用します。この場合、最初のトークンは であり、展開されて残りのすべてがダンプされます。\romannumeral
\calbfhelpA
\BODY
\"a
すると別の問題が発生します。つまり、前に言ったように機能した唯一の理由は、\calbf
すべてが 内にあるため、入力の個々の文字を正常に分離できなかったということです\BODY
。修正には、 内で最初の引数がマクロかどうかをテストする必要があります。最初の引数がマクロの場合は、それを保存し、次のトークンも取得します。 またはトークン\calbfhelpB
が表示された場合にも問題が発生するため、それらを個別にテストします。\par
\\
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{environ}
\usepackage[scale=1]{miama}
\usepackage{stackengine}
\def\useanchorwidth{T}
\def\stacktype{L}
\def\stackalignment{l}
\def\calup{.2pt}
\def\calover{.15pt}
\makeatletter
% Terminal token to signal end of input.
% We give it a unique definition so that `\ifx\endtoken\anythingelse` always tests false.
% Since we're using fexpansion, we need an extra `\noexpand` to prevent it from getting
% turned into something else.
\def\calbf@endtoken{\noexpand\calbf@endtoken}
% Use \romannumeral trick to "f expand" argument
% We are going to parse by spaces, so we need to add a terminal space and \relax
% so we can tell when we are done.
\def\calbf#1{\expandafter\calbf@\romannumeral-`0#1 \calbf@endtoken}
% Needs to be \long in case argument is a \par token.
% #1 - a single word
\long\def\calbf@#1 {%
\calbf@handleword{}#1\calbf@endtoken
% Check if we are done. If not, fexpand rest of input and recurse.
\@ifnextchar\calbf@endtoken{}{\ \expandafter\calbf@\romannumeral-`0}%
}
% Helper macro to test for equality.
\long\def\calbf@ifx#1#2{%
\ifx#1#2\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
}
% Test if argument is a macro (checks if \string#1 contains multiple characters).
\long\def\calbf@ifmacro#1{%
\expandafter\ifx\expandafter$\romannumeral-`0\expandafter\@gobble\string#1$%
\expandafter\@secondoftwo
\else
\expandafter\@firstoftwo
\fi
}
\long\def\calbf@handleword#1#2{%
\calbf@ifx{#2}{\calbf@endtoken}{}{% we're done with this word
\calbf@ifx{#2}{\par}{%
#2\calbf@handleword{}% just pass \par tokens through
}{%
\calbf@ifx{#2}{\\}{%
#2\calbf@handleword{}% just pass \\ tokens through
}{%
\calbf@ifmacro#2{% If it's an accent, save it and grab the argument too.
\calbf@handleword{#1#2}%
}{%
\stackon[\calup]{#1{#2}}{\kern\calover#1{#2}}% Otherwise print it.
\calbf@handleword{}%
}%
}}}%
}
\NewEnviron{MyCal}{%
%\fmmfamily
\noindent
\calbf{Test0}\\ \BODY \\\\
\calbf{\BODY}%
}
\makeatother
\begin{document}
\def\calup{.3pt}
\def\calover{.3pt}
\"{ab}
\begin{MyCal}
MyCal:\\
Test1: %ä.ö.ü.Ä.Ö.Ü.ß.\ss.
\par
abcd
\"e \"i \"a \"o \"u \"e\"i\"a\"o\"u \"{abcd} {1234}
\end{MyCal}
\par\vspace{1em}
%\calbf{ä.ö.ü.Ä.Ö.Ü.ß.\ss \ldots á é ó í ú \ldots \"e \"i \"a \"o \"u}
\end{document}