Cómo poner en negrita texto escrito a mano personalizado

Cómo poner en negrita texto escrito a mano personalizado

Yo uso elmiamafuente para simular fragmentos de texto cortos (un par de líneas) escritos a mano. Como la fuente es bastante ligera, utilizo una adaptación deSteven B. Segletessolución de Cómo poner en negrita un texto caligráfico personalizado

  1. El problema es que al darlo \BODYcomo \calbfargumento, se traga todo salto de línea. (Pero maneja bien caracteres UTF-8 con diéresis alemanas, etc.). Esto no tiene nada que ver con la fuente miama. El salto de línea también se ve afectado sin él.
  2. También me pregunto sobre el hecho de que llamar \calbfcomo se muestra en la última línea (sin comentar), genera este error:

    ! Error de entrada del paquete: secuencia de bytes UTF-8 no válida.

    Consulte la documentación del paquete inputenc para obtener una explicación. Escriba H para obtener ayuda inmediata. ...

    l.61 ...á é ó í ú \ldots \"e \"i \"a \"o \"u} introduzca el código aquí

¿Alguien puede mostrarme cómo manejar (especialmente) el problema 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}

Respuesta1

Pruebe esto para el problema 1. No entiendo lo suficiente sobre el problema 2 para intentar resolverlo.

El problema principal era que la versión original \calbfno tenía ningún manejo de expansión. Entonces, lo que sucedió fue que \calbfvio una sola ficha \BODY, la pasó y dijo \stackon[\calup]{\BODY}{\kern\calover\BODY}. La razón por la que \calbfse intenta pasar un token a \calupla vez se debe presumiblemente al hecho de que pasar un bloque completo de texto destruye los saltos de línea.

Por lo tanto, cambiar \calbfpara ampliar su argumento ayuda. Utilizo el \romannumeraltruco para expandir recursivamente el primer token de \calbfhelpA. En este caso, el primer token lo es \BODY, se expande y elimina el resto de todo.

Entonces surge otro problema, que es que la única razón por la que funcionó decir \"aantes fue porque \calbfno estaba separando exitosamente los caracteres individuales de la entrada porque estaba todo en formato \BODY. La solución requiere probar \calbfhelpBsi el primer argumento es una macro. Si el primer argumento es una macro, guárdelo y obtenga también el siguiente token. También tenemos problemas si vemos un token \paro \\, por lo que los probamos por separado.

\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} 

información relacionada