
나는미아마짧은(몇 줄) 손으로 쓴 텍스트를 시뮬레이션하는 글꼴입니다. 글꼴이 다소 가벼워서 다음을 사용합니다.스티븐 B. 세글레츠솔루션 사용자 정의 붓글씨 텍스트를 굵게 표시하는 방법
- 문제는 인수
\BODY
로 제공하면\calbf
모든 줄 바꿈을 삼킨다는 것입니다. (그러나 독일어 움라우트 등의 UTF-8 문자를 잘 처리합니다.) 이것은 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
그것을 통과시켜서 말한 것 입니다 \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}