Skip to content

Instantly share code, notes, and snippets.

@claudio-naoto
Created January 5, 2021 10:28
Show Gist options
  • Save claudio-naoto/d7d339879b2444b02d9ce35fdd9595a1 to your computer and use it in GitHub Desktop.
Save claudio-naoto/d7d339879b2444b02d9ce35fdd9595a1 to your computer and use it in GitHub Desktop.
Brazilian portuguese translation of demo.saty
@require: stdjabook
@require: code
@require: itemize
@require: tabular
@require: proof
@import: local
document (|
title = {Visão geral de \SATySFi;};
author = {Takashi SUWA};
show-title = true;
show-toc = true;
|) '<
+section{Starting}<
+p{
\href(`https://github.com/gfngfn/SATySFi`){\dfn{\SATySFi;}} é um novo sistema de composição tipográfica
resultado de um projeto exploratório da IPA (Information-technology Promotion Agency, Japan) de 2017.
Existem dois tipos de sistemas de composição tipográfica:
\listing{
* editores GUI que mostram o estado atual do documento \dfn{WYISIWYG} (What You See Is What You Get)
* sistemas batch, onde o documento é descrito como um arquivo texto em uma linguagem de marcação (\dfn{Markup language}) e é a entrada de um sistema de processamento da linguagem, que produz o documento final composto
em PDF ou algum outro formato
}%
\SATySFi; pertence a última categoria. Outros programas nesta categoria incluem \LaTeX; e troff.
Qual a diferença entre \SATySFi; de outros processadores de linguagens de marcação, como \LaTeX;?
De maneira simples, as maiores diferenças são:
\listing{
* O código usado para definir e descrever os comandos é \emph{bastante legível e de fácil customização}
* \emph{A apresentação dos erros é rápida e clara} quando o usuário entra com comandos errados
}%
Antes de entrar nos detalhes, vamos olhar a motivação de implementar \SATySFi;.
Vamos explicar passo a passo.
}
+p{
O que é melhor, o método de linguagens de marcação ou o método WYSIWYG?
Existem defensores dos dois métodos.
Entretanto, pode-se dizer que há um compromisso entre as vantagens e desvantagens de cada método.
Como vantagens gerais das linguagens de marcação comparados ao método WYSIWYG:
\listing{
* Como a entrada é um arquivo texto, gerenciamento de diferenças é simples
* Comandos definidos pelo usuário permitem:
** processamento complexo automático
** mudanças flexíveis na aparência sem mudar o conteúdo do documento
}%
Entretanto, a desvantagem óbvia é:
\listing{
* Qualquer texto pode ser passado como entrada, então é fácil para o usuário entrar código errado.
}%
Das entradas erradas, quando o código é aceitável para o sistema de processamento,
em principio o sistema não pode detectar erros (pelo menos sem métodos estatísticos),
e o usuário deve encontrar os erros olhando a versão impressa.
Para código que não é aceitável para o sistema de processamento, a detecção é possível.
Em outras palavas, o sistema de processamento deveria encontrar e reportar erros como atribuição errada
de argumentos para comandos.
A fraqueza é que é simples para o usuário entrar código que não pretendia.
Em alguns sistemas de processamento de linguagem de marcação, código que não é adequado para o sistema de
processamento é aceito como entrada.
Penso que este tipo de relatório de erros deve ter um grande impacto na eficiência na escrita do usuário.
}
+p{
Entretanto, em sistemas de processamento de linguagens de marcação existentes, o relatório de erros de
entradas não bem formadas tendem a ser díficeis de entender. Por exemplo, no caso de LATEX,
muitos usuários viram incontáveis erros como:
}
+console(`! Undefined control sequence.`);
+console(`! Missing $ inserted.`);
+console(`! Missing number, treated as zero.`);
+pn{
Em alguns casos a causa pode ser conhecida imediatamente, mas basicamente:
"Uma inconsistência ocorreu durante o processo de composição".
Como o mecanismo é tal que um erro é reportado quando ele "ocorreu", o comando que o causou é desconhecido
para o usuário.
Erros são frequentemente reportados devido a inconsistências entre a descrição da implementação e os
argumentos dados.
"Algo está errado até a enésima linha".
Em muitos casos, você consegue apenas informação como esta, e quando isto acontece, não há escolha mas
procurar o erro usando busca binária comentando o código e identificando a localização da causa.
}
+p{
Finalmente, retornando ao tópico principal, \SATySFi; é uma resposta para resolver estes problemas.
Especificamente, porque o sistema projetado baseado em uma linguagem adequada para programação
funcional:
\listing{
* têm \emph{tipos fortes}
* e você têm que \emph{prestar atenção apenas no processamento local} sem estar consciente do estado global.
}%
É possível desfrutar os beneficios do conhecimento do tipo da função, tais como, relatório de erros reforçado
com a inspeção de tipos.
}
+p{
De qualquer forma, a habilidade do relatório de erros será colocado de lado por enquanto, e sua
função no processo de composição tipográfica será detalhada no capitulo \ref(`sec:typesetting`);.
}
>
+section ?:(`sec:typesetting`) {Características típicas}<
+subsection{Composição tipográfica ocidental}<
+p{
Os glifos de caractere têm largura positiva e o papel tem largura finita. Obviamente, simplesmente organizar os caracteres horizontalmente não caberá no papel, então você tem que começar uma nova linha em algum lugar. Este processo de divisão de linha é essencial na formação de uma coluna.
}
+p{
Na composição tipográfica européia e mais geralmente "alfabética", é comum dividir as linhas em algum lugar no espaço entre as palavras e justificar o comprimento de cada linha.
Além do espaço em branco entre as palavras, em alguns casos é executado \dfn{hifenização}, ou seja, um processo de inserção de um hífen em uma palavra para dividir a linha.
}
+p{
Em relação a esta composição européia, \SATySFi; segue os métodos de processamento
do grande pioneiro \TeX; e realiza o processamento de divisão de linhas
com um algoritmo chamado \dfn{algoritmo Knuth-Plass} [Knuth 1978].
Ele também adiciona hifenização automaticamente às palavras para dividir as linhas, se necessário.
O local onde um hífen pode ser inserido é determinado para cada palavra por um método chamado \dfn{algoritmo Liang-Knuth} que usa um dicionário de padrões de hífen [Liang 1983], que também está instalado no sistema de processamento \TeX;.
\SATySFi; segue isso e faz o mesmo processamento.
}
+p{
Vamos dar uma olhada em alguns textos em idiomas europeus compostos por \SATySFi; abaixo.
Você pode ver que existem algumas ligaduras e hifenização automática:
}
+paragraph-frame<
+p-latin{
The quick brown fox jumps over the lazy dog.
¿But aren’t Kafka’s Schloß and Æsop’s Œuvres often
naïve vis-à-vis the dæmonic phœnix’s official rôle
in fluffy soufflés?
}
+p-latin{
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore
et dolore magna aliqua.
Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi
ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit
in voluptate velit esse
cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident,
sunt in culpa
qui officia deserunt mollit anim id est laborum.
}
>
>
+subsection{Composição tipográfica japonesa}<
+p{
Em japonês, a composição costuma organizar os caracteres com base em quadrados e, basicamente, não há problema em começar uma nova linha no meio de uma palavra, o que parece ser uma regra de composição um pouco mais flexível do que a europeia.
Muitas partes deste documento (do documento original em japonês) são escritas em japonês, e a composição em japonês será familiar para aqueles que a lerem.
No entanto, ajustes visuais, como o tamanho do espaço antes e depois de parênteses e sinais de pontuação, não são tão óbvios.
Além disso, não importa o quão tolerante seja a posição de quebra de linha, por exemplo, a divisão de
"chocolate" 「チ ョ コ レ ー ト」 em linhas entre "chi" 「チ」 e "okolate" 「ョ コ レ ー ト」
ou dividi-lo em "chocole" 「チ ョ コ レ」 e "toto" 「ー ト」 desperta fortemente uma sensação de desconforto.
Portanto, arranjos como \dfn{caracteres proibidos de fim de linha} e \dfn{caracteres proibidos de início de linha} são necessários.
}
+p{
Um documento chamado \dfn{"Requirements for Japanese Typesetting"} (W3C Japanese Typesetting Task Force, 2012)
foi formulado como um resumo dessas regras e é comumente conhecido como \dfn{JLreq}.
\SATySFi; e os arquivos de classe \file{stdja} e \file{stdjabook} são implementados para compor sentenças japonesas em princípio de acordo com as regras de composição tipográfica japonesas definidas neste JLreq, embora não perfeitamente.
}
% +p{
% Exemplos específicos não são fornecidos aqui. Felizmente, muitas partes deste documento* são escritas em japonês e exemplos de resultados de composição podem ser encontrados em todos os lugares.
% Divirta-se certificando-se de que não haja espaços entre os idiomas japonês e europeu e que não haja espaços extras no final das linhas que terminam em colchetes ou vírgulas.
% * do documento original em japonês
% }
% +p{
% Além disso, a composição japonesa pode ser composta com boa aparência sem executar o processamento de ligadura e de kerning como na composição europeia.
% E de fato \SATySFi; não leva em consideração a existência de ligaduras no processamento de caracteres japoneses.
% No entanto, nos últimos anos, as fontes com glifos de caracteres japoneses com larguras de caracteres proporcionais surgiram principalmente para fins de design,
% e fontes que expressam escrita contínua por processamento de ligadura apareceram e suponho que será necessário lidar com elas no futuro.
% }
>
+subsection{Função de inserção de imagem}<
+display-boxes('<
+p{
O logotipo é mostrado na Figura \ref(`fig: logo`); como prova de que uma imagem pode ser inserida.
\figure ?:(`fig:logo`){\SATySFi; logo}<
+image-frame{\insert-image(7cm)(`satysfi-logo.jpg`);}
>
}
>)(```
+p{
O logotipo é mostrado na Figura \ref(`fig: logo`); como prova de que uma imagem pode ser inserida.
\figure ?:(`fig:logo`){\SATySFi; logo}<
+image-frame{\insert-image(7cm)(`satysfi-logo.jpg`);}
>
}
```);
>
+subsection{Tabela}<
+p{
\SATySFi; também tem uma função de layout de tabela. O código é longo, então vou omiti-lo.
}
+frame<
+centering{
\tabular(fun cellf multif empty -> [
[cellf {Program} ; multif 1 2 {Answer}; empty; multif 1 2 {Time [s]}; empty;];
[empty ; cellf {A}; cellf {B}; cellf {A}; cellf {B}];
[cellf {Program 1}; cellf {Yes}; cellf {Yes}; cellf {${0.004}}; cellf {${0.016}}];
[cellf {Program 2}; cellf {No} ; cellf {–} ; cellf {${0.004}}; cellf {–} ];
[cellf {Program 3}; cellf {Yes}; cellf {Yes}; cellf {${0.004}}; cellf {${0.078}}];
[cellf {Program 4}; cellf {Yes}; cellf {Yes}; cellf {${0.008}}; cellf {${0.069}}];
])(fun xs ys -> (
match (ys, List.reverse ys) with
| (y0 :: y1 :: y2 :: _, ylast :: _) ->
( match (xs, List.reverse xs) with
| (x0 :: x1 :: _ :: x3 :: _, xlast :: _) ->
let grlstY1 =
[y1; y2] |> List.map (fun y ->
stroke 0.5pt Color.black (Gr.line (x0, y) (xlast, y)))
in
let grlstY2 =
[y0; ylast] |> List.map (fun y ->
stroke 1pt Color.black (Gr.line (x0, y) (xlast, y)))
in
let grlstX =
[x1; x3] |> List.map (fun x ->
stroke 0.5pt Color.black (Gr.line (x, y0) (x, ylast)))
in
(stroke 0.5pt Color.black (Gr.line (x0, y1) (x1, y2)))
:: (List.append grlstX (List.append grlstY1 grlstY2))
| _ -> []
)
| _ -> []
));
}
>
>
+subsection{Fórmula numérica}<
+p{
Uma função do \LaTeX;, que é um sistema de composição tipográfica existente, é boa em produzir composição matemática com alta qualidade impressionante.
Com \SATySFi;, uma composição matemática que pode ser considerada comparável foi realizada. Vamos tentar algumas fórmulas:
}
+display-boxes('<
+math-list[
${F = G \frac{M m}{R^2}};
${\limto{N}{\infty} \sums{n = 1}{N} \frac{1}{n^2}
= \frac{\pi^2}{6}};
${\paren{\paren{\paren{A} + B} + C}};
${\brace{\brace{\brace{A} + B} + C}}
];
>)(```
+math-list[
${F = G \frac{M m}{R^2}};
${\limto{N}{\infty} \sums{n = 1}{N} \frac{1}{n^2}
= \frac{\pi^2}{6}};
${\paren{\paren{\paren{A} + B} + C}};
${\brace{\brace{\brace{A} + B} + C}}
];
```);
+display-boxes('<
+p{ A solução da equação ${a x^2 + b x + c = 0}
para ${x} é ${x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}}. }
>)(```
+p{ A solução da equação ${a x^2 + b x + c = 0}
para ${x} é ${x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}}. }
```);
+display-boxes('<
+math(
let int1 = ${\int_0^a} in
let int2 = ${\int_0^\sqrt{a^2 - x^2}} in
let sqrt2 = ${\sqrt{x^2 + r^2}} in
${
\frac{#int1 x \ordd x #int2 r #sqrt2 \ordd r}{
#int1 \ordd x #int2 r #sqrt2 \ordd r} = \frac{2a}{5} }
);
>)(```
+math(
let int1 = ${\int_0^a} in
let int2 = ${\int_0^\sqrt{a^2 - x^2}} in
let sqrt2 = ${\sqrt{x^2 + r^2}} in
${
\frac{#int1 x \ordd x #int2 r #sqrt2 \ordd r}{
#int1 \ordd x #int2 r #sqrt2 \ordd r} = \frac{2a}{5} }
);
```);
+display-boxes('<
+math(${
\derive{
| A | \derive{| B | C |}{D} |
}{E}
});
>)(```
+math(${
\derive{
| A | \derive{| B | C |}{D} |
}{E}
});
```);
>
>
>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment