Portuguese (Portugal) typography rules · pt-PT
Português (Portugal)
Portuguese (Portugal) sets primary quotation marks as «…» and secondary quotation marks as “…”. A break in a sentence is written with an em dash (U+2014) with a space on each side; no single range convention is verified, so none is substituted. Numbers bind to units such as % ‰ °C with U+00A0.
Run polytypo with Portuguese (Portugal) rules
Edit the text and polytypo typesets it with the pt-PT locale, in your browser. The code under the form is the call that produces the result.
The call the form above is making, right now
Other locales, and all the options, are in the full playground.
Portuguese (Portugal) typography at a glance #
| Tag | pt-PT |
|---|---|
| Name | Portuguese (Portugal) |
| Primary quotes | « U+00AB left-pointing double angle quotation mark … » U+00BB right-pointing double angle quotation mark |
| Secondary quotes | “ U+201C left double quotation mark … ” U+201D right double quotation mark |
| Parenthetical dash | spaced em dash |
| Range dash | no dash substitution |
| Rules with citations | quotes, dashes, ranges, ellipsis, hyphen, nbsp |
| Conformance cases | 19 |
Which locale tags resolve to Portuguese (Portugal)? #
The locale option is resolved exactly, then by declared alias, then by dropping the region once; anything else throws POLYTYPO_UNKNOWN_LOCALE.
Declared alias: pt → pt-PT.
| Tag | How it resolves |
|---|---|
pt-PT | registered locale |
pt | declared alias |
pt-AO | region removed, then a declared alias |
Which quotation marks does Portuguese (Portugal) use? #
| Primary | « U+00AB left-pointing double angle quotation mark … » U+00BB right-pointing double angle quotation mark — no space inside the marks |
|---|---|
| Secondary | “ U+201C left double quotation mark … ” U+201D right double quotation mark — no space inside the marks |
Elision clitics
Word fragments that stand against an apostrophe at the edge of an inline span; a narrow mark next to one is not paired as a quotation.
| Before the apostrophe | d n pel m t lh sant |
|---|---|
| After the apostrophe | none |
quotes
How are apostrophes set in Portuguese (Portugal)? #
apostrophe
Which dashes does Portuguese (Portugal) use for breaks and ranges? #
Parenthetical break (dash.parenthetical) | an em dash (U+2014) with a space on each side |
|---|---|
Between numbers and dates (dash.range) | no substitution: the locale has no verified convention, so the rule writes nothing |
The dashes rule reads the parenthetical convention. The ranges rule reads the range convention and is off by default.
dashes
How is the ellipsis set in Portuguese (Portugal)? #
An ellipsis keeps its full form after ! and ?; this locale does not abbreviate it there.
ellipsis
How are hyphens handled in Portuguese (Portugal)? #
The hyphen lists are empty for this locale, so the hyphen rule changes nothing.
Where does Portuguese (Portugal) use no-break spaces? #
Characters that take U+00A0 before them (nbsp.beforePunctuation) | none |
|---|---|
Characters that take U+202F before them (nbsp.narrowBeforePunctuation) | none |
Short words after which the space becomes U+00A0, so the word is not left at the end of a line (nbsp.afterShortWords) | none |
Multi-token abbreviations whose internal spaces become U+00A0 (nbsp.abbreviations) | p. ex. |
Units and signs bound to the preceding number with U+00A0 (nbsp.beforeUnits) | % ‰ °C km cm mm kg kW kWh Hz |
Abbreviations bound to the following number with U+00A0 (nbsp.beforeNumber) | p. |
Abbreviations bound to the following word with U+00A0 (nbsp.beforeWord) | none |
Symbols bound to the following number with U+00A0 (nbsp.afterSymbols) | none |
Initials (nbsp.initialBinding) | none — disabled: initials are never bound to the name that follows |
spaces
nbsp
How are symbols set in Portuguese (Portugal)? #
symbols
How does Portuguese (Portugal) text behave in text, HTML and Markdown modes? #
Each input is the locale's sample sentence followed by a code run, say("a -- b ..."). text mode sets the whole string as prose, code run included. In html and markdown mode the code run comes back byte for byte; only the prose is set.
How does Portuguese (Portugal) differ from Portuguese (Brazil)? #
pt-PT and pt-BR are separate locales. Fields whose values differ:
| Field | pt-PT | pt-BR |
|---|---|---|
quotes.primary.open | « | “ |
quotes.primary.close | » | ” |
quotes.secondary.open | “ | ‘ |
quotes.secondary.close | ” | ’ |
dash.parenthetical | em-spaced | en-spaced |
The same input through both:
Which sources define Portuguese (Portugal) typography? #
8 citations in spec/locales/pt-PT.json, grouped by the rule each one supports. A citation names the authority; the note records what the source does and does not settle.
ellipsis
- Código de Redação Interinstitucional (PT, 2022), ponto 10.4.7 «Reticências», com o exemplo impresso «É o dianho!… É o dianho!… E, olha lá, porque não vais ter com o padre?…» (Aquilino Ribeiro) op.europa.eu
Justifica abbreviatedAfterTerminal = false. O passo citado escreve as reticências completas imediatamente a seguir a «!» e a «?» — «!…» e «?…» —, e nenhuma fonte consultada prevê a forma abreviada de dois pontos que o russo usa, pelo que esse ramo de ellipsis.md fica desligado para o português. Nenhuma fonte se pronuncia sobre U+2026 contra três U+002E: essa escolha é do motor e é igual em todas as locales. Consultado em 18.9.2026.
ranges
- Código de Redação Interinstitucional (PT, 2022), ponto 10.4.11: «Quando se trata de dois anos completos ou de um período de vários anos usa-se o hífen: o programa para 1996-1997; o período de 1993-1996»; ponto 10.9.1: «Para qualquer período que decorra entre dois anos consecutivos, estes são separados por um hífen, se o período abrange a totalidade dos dois anos (1990-1991), e por uma barra, em caso contrário (ano letivo de 1990/1991)» op.europa.eu
Justifica dash.range = "none" pela positiva. A regra é enunciada duas vezes, em dois capítulos da parte específica da língua, e as duas vezes nomeia o hífen; a barra fica reservada para o período que não abrange os dois anos completos. «none» é o único valor do enum que respeita a fonte, porque `ranges` não emite nada nesse modo (ranges.md §2) e o U+002D escrito pelo autor sobrevive — substituí-lo por U+2013 contrariaria a citação. Consultado em 18.9.2026.
dashes
- Código de Redação Interinstitucional (PT, 2022), Quarta parte, ponto 10.4.8 «Travessão»: «O travessão (traço horizontal maior que o hífen) emprega-se: […] d) No lugar de parênteses: As condições — ordenado e subvenções — eram boas» op.europa.eu
Justifica dash.parenthetical = "em-spaced". O papel (substitui parênteses) e o espaçamento (um espaço ordinário de cada lado de CADA travessão) estão no exemplo impresso; ao contrário do grego, do espanhol e do italiano, o português não usa o padrão «espaços fora do par, colado por dentro», pelo que o enum exprime a convenção sem forçar nada. A LARGURA foi verificada extraindo a camada de texto do PDF, não julgada a olho sobre a página rasterizada: o carácter é U+2014. Esta é a segunda divergência regional do português — o Manual de Redação da Presidência da República (Brasil) define o travessão como «um hífen prolongado» e o seu texto extraído dá U+2013 —, e é a segunda razão para pt-PT e pt-BR serem ficheiros distintos. Consultado em 18.9.2026.
hyphen
- Acordo Ortográfico da Língua Portuguesa (1990), Base XX «Da divisão silábica»: «Na translineação de uma palavra composta ou de uma combinação de palavras em que há um hífen, ou mais, se a partição coincide com o final de um dos elementos ou membros, deve, por clareza gráfica, repetir-se o hífen no início da linha imediata: ex- -alferes» www.portaldalinguaportuguesa.org
Justifica as três listas vazias, e justifica-as pela positiva, não por ausência de fonte. O português não só permite como PRESCREVE a quebra de linha sobre o hífen de um composto, repetindo-o na linha seguinte: uma forma que é normativamente quebrada nesse ponto não pode ser uma forma cujo hífen tenha de resistir à quebra, que é a única coisa que esta regra consome. A regra é, portanto, um no-op total demonstrável para o português (hyphen.md §2), e qualquer runtime que ligue compostos portugueses com U+2011 está errado. Corroborado pelo Código de Redação Interinstitucional (PT, 2022), ponto 10.2 e ponto 10.4.12 («segunda-/-feira», «salmão-do-/-atlântico»), e pelo Manual de Redação da Presidência da República (Brasil, 2.ª ed., 2002), §9.1.3.1 («decreto-/-lei», «far-/-se-á»). É o campo em que Portugal, o Brasil e o próprio Acordo dizem explicitamente a mesma coisa. Consultado em 18.9.2026.
quotes
- Serviço das Publicações da União Europeia, Código de Redação Interinstitucional (edição PT, 2022, ISBN 978-92-78-42820-4), Quarta parte «Convenções próprias da língua portuguesa», ponto 10.4.10 «Aspas», N. B.: «O primeiro nível de aspas a utilizar corresponde às aspas angulares («»). Quando necessário, utilizam-se três níveis de aspas devidamente hierarquizadas: «…» — as aspas angulares, “…” — as aspas curvas duplas ou vírgulas dobradas, ‘…’ — as aspas curvas simples ou vírgulas simples» op.europa.eu
Primário U+00AB/U+00BB, secundário U+201C/U+201D. O terceiro nível descrito pela fonte não é exprimível em locale.schema.json, que só tem primary e secondary — limite do esquema, não lacuna da fonte, como já consta de el.json. innerSpace = "none": todos os exemplos do ponto 10.4.10 escrevem o texto colado às aspas e a secção nunca pede espaço interior. A Quarta parte é o capítulo específico da língua portuguesa; a Terceira parte do mesmo guia é deliberadamente NÃO invocada, porque o seu §6.4 declara que as suas regras «são o resultado de um acordo interinstitucional» e que «certas escolhas foram feitas em prol de uma convenção comum» — estilo de editor, não prova sobre o português, a mesma desqualificação que el.json regista. É POR ISTO que esta locale é pt-PT e não pt: o uso brasileiro diverge e tem ficheiro próprio (pt-BR), em vez de ser apanhado por um fallback que lhe daria aspas que não usa. Consultado em 18.9.2026.
- Acordo Ortográfico da Língua Portuguesa (1990), Base XVIII « Do apóstrofo », 1.º : a) « Faz-se uso do apóstrofo para cindir graficamente uma contração ou aglutinação vocabular, quando um elemento ou fração respetiva pertence propriamente a um conjunto vocabular distinto: d'Os Lusíadas, d'Os Sertões; n'Os Lusíadas, n'Os Sertões; pel'Os Lusíadas, pel'Os Sertões » ; b) « d'Ele, n'Ele, d'Aquele, n'Aquele, d'O, n'O, pel'O, m'O, t'O, lh'O » e a série feminina correspondente ; c) « Sant'Ana, Sant'Iago » ; d) « borda-d'água, copo-d'água, estrela-d'alva, mãe-d'água, pau-d'alho, pau-d'arco » www.priberam.pt
Base XVIII is a primary normative text common to both orthographies, which is why pt-PT and pt-BR carry the identical list: d, n, pel (1.º a and b), m, t, lh (1.º b) and sant (1.º c). Base XVIII 2.º bounds the set from the other side — the apóstrofo is not admissible in the combinations of de and em with the definite-article forms (do, da, dele, no, na, nele, num and the rest) — so this is an enumerated set rather than an argument from silence. The archaic anthroponymic forms of 1.º c) (Nun'Álvares, Pedr'Eanes) are cited by the same clause but deliberately not listed: both have a letter on each side of the mark, so quotes.md §3.2's medial-elision veto already declines them and an entry would be evidenced-inert. after is empty: Portuguese enclisis takes a hyphen (Base XVII: amá-lo, dá-se), never an apostrophe. The clause that makes this list load-bearing is 1.º a), which is about book titles: a title set in emphasis rather than italics puts a span boundary immediately after the mark, d'<em>Os Lusíadas</em>, which is precisely the shape the veto reads. Retrieved from a faithful reproduction hosted by Priberam/FLiP, including the official text's own errata footnotes, rather than from the official gazette; the Academia Brasileira de Letras PDF has no extractable text layer. quotes.md §3.2's span-boundary elision veto (spec 1.4.0) reads this list only when the mark's other literal neighbour is modes.md §3.2's inline span boundary, so every entry is matched against the maximal LETTER run on one side of the mark and nothing else. The list is decline-only: the worst it can do is refuse a pairing quotes would otherwise have formed.
nbsp
- Código de Redação Interinstitucional (PT, 2022), anexo A3 «Abreviaturas e símbolos», pontos 2 e 3, com as Observações «Todos os números são acompanhados dos respetivos símbolos: de 4 m em 4 m; de 1 kg, 6 kg a 15 kg», e Quarta parte, ponto 10.9.1: «As percentagens, pesos e medidas escrevem-se numericamente: 7 % do volume de negócios», «a temperatura atingiu hoje os 39 °C»; BIPM, The International System of Units (SI), 9.ª ed., resumo conciso: «A single space is always left between the number and the unit» www.bipm.org
Justifica nbsp.beforeUnits. A locale atesta a PERTENÇA — que estes símbolos são unidades e que se escrevem depois do número com um espaço; o mecanismo (converter esse espaço em U+00A0, nunca o inserir) é da regra e está fixado em nbsp.md §2.1. REPARO CITADO, mais importante do que qualquer inclusão: o ponto 10.9.1 exclui «h» por nome — «horas (o símbolo «h» escreve-se sempre sem ponto, sem espaços): eram as 18h30» —, pelo que «h» NÃO entra na lista e há um caso de conformidade a fixá-lo. Os símbolos de uma só letra (m, g, l, t, s, A, W, V, K) ficam igualmente de fora, embora atestados, pela mesma razão que em fr: não são desambiguáveis sem contexto. Note-se que o português escreve «7 %» com espaço, ao contrário do grego. Consultado em 18.9.2026.
- Código de Redação Interinstitucional (PT, 2022), anexo A3, ponto 4 «Obras»: «p. ex. por exemplo»; «e. g. exempli gratia (por exemplo). Utilizar de preferência p. ex.»; Quarta parte, ponto 10.9.1: «paginação corrente, parágrafos, artigos: artigo 2.º, terceiro parágrafo, alínea b), p. 24»; nota (3) do ponto 6.4: «Para o «º» ordinal (1.º, 2.º…) ou em «n.º», utilizar a terminação «o» após o ponto e em posição superior à linha [não utilizar o sinal «º» do teclado Azerty nem a sequência Alt 0176 (símbolo do grau «°»)]» op.europa.eu
Justifica as listas vazias e initialBinding = "none", e diz com exatidão em que se apoiam: ao contrário do guia grego, a parte portuguesa NÃO contém nenhuma frase que negue pelo nome o uso francês do espaço antes da pontuação dupla. A posição é «nenhuma fonte o exige», e não «uma fonte o proíbe»; o que se observa é que nenhum exemplo do capítulo o escreve, e isso é uma observação, assinalada como tal. beforeNumber contém apenas «p.»: o ponto 10.9.1 atesta a ligação («p. 24», «Lei n.º 123»), mas «n.º» NÃO pode ser listado, porque a nota (3) do ponto 6.4 do mesmo guia prescreve um «o» sobrescrito e RECUSA expressamente tanto U+00BA como U+00B0 — listar «n.º» seria citar uma fonte que proíbe esse mesmo carácter. A decisão do operador de 18.9.2026 sobre o «n°» francês cobre uma fonte SILENCIOSA e não se estende a uma que fala e recusa. beforeWord fica vazio: o anexo A3 enumera «Sr.», «Dr.», «Prof.», mas limita-se a expandi-los e nenhuma fonte os mostra ligados ao nome seguinte. GAP REGISTADO, não resolvido: o ponto 10.9.1 exige espaço protegido DENTRO dos grupos de algarismos («um total de 12 345 euros»; «este espaço é protegido»), e locale.schema.json não tem campo para isso. Consultado em 18.9.2026.