Boa maneira de fazer \ números com círculos de texto?

Esta questão levou a um novo pacote:
circledsteps

Estou tentando fazer alguns números bonitos em um círculo, usando o comando simples:

\textcircled{1} 

No entanto, o círculo está desalinhado verticalmente com o número e parece um pouco desleixado:

texto alternativo

Qualquer sugestão, como pode Eu ajusto o alinhamento vertical para que os números pareçam mais centralizados em relação aos círculos? Ou, se isso não for uma opção, quais outras maneiras de obter os mesmos resultados são possíveis?

Vou usar apenas essas para números e em poucos lugares, portanto, o ajuste manual por glifo é uma opção.

Estou usando pdfLaTeX com o Computer Modern, se for o caso.

Comentários

  • Tenho duas boas respostas aqui, por menos de 30 minutos utes (vocês são rápidos!). Eu ‘ provavelmente farei uma resposta do wiki da comunidade resumindo todas as opções algum dia, talvez algumas outras soluções apareçam nesse meio tempo.
  • Eu ‘ m privado de sono, que ‘ s por quê!
  • Que pacote fornece \textcircled?
  • @Matthew: Parece ser integrado ao LaTeX. Funciona imediatamente.
  • Você pode usar Unicode. U + 2460-2473 para 1 a 20, U + 24EA para 0, U + 3251-325F para 21-35 e U + 32B1-32BF para 36-50.

Resposta

Aqui “uma solução TikZ:

\documentclass{article} \usepackage{tikz} \newcommand*\circled[1]{\tikz[baseline=(char.base)]{ \node[shape=circle,draw,inner sep=2pt] (char) {#1};}} \begin{document} Numbers aligned with the text: \circled{1} \circled{2} \circled{3} end. \end{document} 

texto alternativo

É apenas um nó. As opções do TikZ são usadas para alinhar a linha de base, ajustar o tamanho e obter a forma do círculo. Você está livre para escolher outras opções em relação ao tamanho ou espessura do círculo (opção thick). Há mais: por exemplo, você pode até nomear os nós por outro argumento para conectá-los por setas mais tarde.

Se alguém quiser usá-lo para uma lista enumerada, por exemplo, é fácil, mas deve ser protegido:

\usepackage{enumitem} ... \begin{enumerate}[label=\protect\circled{\arabic*}] \item First item \item Second item \item Third item \item Fourth item \end{enumerate} 

texto alternativo

Comentários

  • Belo exemplo! Tive problemas no passado usando Exemplos TikZ inline, mas agora vejo que é resolvido por baseline=(char.base). Legal.
  • @Stefan: talvez você deva substituir \newcommand por \DeclareRobustCommand, assim o \protect não é mais necessário, o que é mais amigável.
  • Em seguida, deve-se usar \ newcommand para declarar um punho de comando vazio e então usar \ DeclareRobustCommand. Dessa forma, um comando existente emitirá um erro.
  • @LuisFelipeVillavicencioLopez Claro! não é o melhor para discussões de código. Talvez poste uma nova pergunta ou deixe a ‘ s falar na Comunidade LaTeX onde eu posto diariamente.
  • Isso é bom, mas o problema é que pode ‘ t ser usado dentro de um \tikzpicture — como, para exemplo, um texto de nó ou um rótulo. Existe alguma solução para um ” universal ” bom número circulado? Para referência, consulte tex.stackexchange.com/questions/496348/…

Resposta

Fiquei agradavelmente surpreso com quantas pessoas decidiram tentar, e surgiram muitas soluções interessantes. De acordo com a tradição, esta resposta será wiki da comunidade e irá resumir e comparar todas as soluções sugeridas.


Por meio deste documento, sugiro três critérios de avaliação diferentes, cada um classificado de 1 a 5:

  • Simplicidade . Esta é uma medida da facilidade de uso da solução proposta. Pontos deduzidos por usar pacotes adicionais ou definir qualquer coisa diferente de uma macro de conveniência simples.
  • Flexibilidade . Isso inclui principalmente a facilidade de usar isso em outros contextos, neste caso, diferentes formatos, tamanhos e espessuras de estrutura.
  • Precisão . Resumindo, quão esteticamente agradável a solução parece, particularmente quão bem o glifo está centralizado no círculo e como ele se ajusta ao texto de execução livre.

Vamos lá:

  1. A solução raisebox.

    Obrigado Jimi Oke pelos dedos rápidos. Isso veio primeiro e é o que eu particularmente gosto para a aplicação que eu tinha em mente. É tão fácil quanto:

    \raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {8}}} 

    Nada mais do que isso. Em termos de simplicidade, não existe nada melhor do que isso.Sólido 5/5 , já que nenhum pacote extra é necessário e a definição complicada pode ser abstraída trivialmente em uma linha \def.

    Em termos de flexibilidade, esta solução tem taxas muito baixas, pois você não tem controle sobre o tamanho do círculo ou parâmetros (tenho certeza que alguns hackers de TeX fariam prove que estou errado, mas pelo amor de $ DEITY , poupe-nos dessas abominações). 2/5 é bem merecido aqui. {1}

    O problema de precisão é subjetivo como sempre, mas você “precisaria brincar com as distâncias verticais para acertar corretamente ™ para a fonte que você selecionou. 2/5 .

  2. O ding -y solution.

    Isso veio de TH. que sugere o uso de alguns glifos de símbolo predefinidos. O documento oniscient symbols-a4 diz que a única maneira verdadeira de fazer isso é usar:

    \usepackage{pifont} \ding{172}--\ding{181} % seriffed fonts \ding{192}--\ding{201} % sans-seriffed fonts 

    Ou até mesmo a nomenclatura do painel Go:

    \usepackage{igo} \whitestone{1}--\whitestone{99} 

    No lado da simplicidade, isso é avaliado em 4.5 / 5 , embora eu esteja relutante em dar 5 pontos devido aos pacotes extras envolvidos.

    Isso não é nada flexível. Se você não gosta dos glifos, está por sua própria conta. 1/5 .

    Os próprios glifos são bem projetados, como se deve esperar, e os números são visualmente bem alinhado com os círculos. Embora se você tiver um tipo de fonte com um estilo distinto, a fonte dos números pode não combinar bem com o texto.

  3. O obrigatório tikz solução.

    Ahh, sempre há isso, não é. Isso se deve a Stefan Kottwitz .

    \usepackage{tikz} \newcommand*\circled[1]{\tikz[baseline=(char.base)]{ \node[shape=circle,draw,inner sep=2pt] (char) {#1};}} \begin{document} Numbers aligned with the text: \circled{1} \circled{2} \circled{3} end. \end{document} 

    Pessoalmente, não gosto de tikz (eu sei , Devo aprender um desses dias), então ir com isso seria um uso único do pacote para mim, o que eu gostaria de evitar. Não posso dar mais do que 2/5 aqui, mas o tikz fanboiz (e galz!) deve aumentar isso até 4/5 .

    Como no que diz respeito à flexibilidade: este é o verdadeiro negócio. Stefan demonstrou até mesmo como usar os símbolos circulados com listas enumeradas, de todas as coisas. Diferentes formas de quadro são certamente possíveis, com vários graus de ajuste em torno do glifo. Indiscutível 5/5 .

    O alinhamento da linha de base é excelente, sem brincar com alguns ajustes manuais, o que é muito bom. O espaçamento ao redor do símbolo parece correto, embora em texto de execução livre o círculo deva preferencialmente ter um ajuste mais apertado ao redor do número, o que pode ser obtido brincando com o parâmetro inner sep em a definição do comando. 5/5 aqui.

  4. pict2e / picture solução

    Uma adição tardia de Herbert propõe o uso de alguns primitivos básicos dos pacotes picture e pict2e. Aqui vai:

    \usepackage{pict2e,picture} \newsavebox\CBox \newlength\CLength \def\Circled#1{\sbox\CBox{#1}% \ifdim\wd\CBox>\ht\CBox \CLength=\wd\CBox\else\CLength=\ht\CBox\fi \makebox[1.5\CLength]{\makebox(0,1.5\CLength){\put(0,0){\circle{1.5\CLength}}}% \makebox(0,1.5\CLength){\put(-.5\wd\CBox,0){#1}}}} 

    Em termos de simplicidade, isso não é muito bom. Parece um pouco complicado, embora definitivamente compreensível depois de estudá-lo, e usa dois pacotes adicionais. 2/5 é uma pontuação razoável aqui.

    A flexibilidade não é totalmente construída- dentro, mas certamente é possível. O raio do círculo pode ser ajustado, modificando o fator 1.5, e o ajuste da linha de base pode ser reproduzido. 3,5 / 5 .

    Como está nesta definição, a linha de base do texto ao redor é tangente ao círculo em vez de estar alinhada com o círculo base numérica. Isso pode ser desejável em algumas circunstâncias, mas os números parecem um pouco fora do lugar desta forma. Melhores resultados são alcançados com alguns cálculos adicionais ao colocar as caixas e um 3,5 / 5 é fornecido aqui para reflec este potencial.

  5. A outra solução tikz obrigatória

    Matthew Leingang e morbusg tentaram fazer isso, e embora seus esforços sejam certamente apreciados, acho que a solução de Stefan é mais simples. Agradeço o esforço (e sua humildade) e votei positivamente em suas respostas.

Pontuação final:

  • Simplicidade : raisebox
  • Flexibilidade : tikz
  • Precisão : empatado entre tikz e ding

Geral: tikz, sem hesitação ( aclamação do público, chapéus lançados, lenços agitados e tudo mais).

Finalmente, algum código de teste:

\documentclass{article} \usepackage{pict2e,picture} % picture \usepackage{tikz} % tikz \usepackage{pifont} % ding % Picture solution \newsavebox\CBox \newlength\CLength \def\numcircledpict#1{\sbox\CBox{#1}% \ifdim\wd\CBox>\ht\CBox \CLength=\wd\CBox\else\CLength=\ht\CBox\fi \makebox[1.5\CLength]{\makebox(0,1.5\CLength){\put(0,0){\circle{1.5\CLength}}}% \makebox(0,1.5\CLength){\put(-.5\wd\CBox,0){#1}}}} % TikZ solution \newcommand*\numcircledtikz[1]{\tikz[baseline=(char.base)]{ \node[shape=circle,draw,inner sep=1.2pt] (char) {#1};}} % Modified \textcircled solution \newcommand*\numcircledmod[1]{\raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {#1}}}} \begin{document} \begin{tabular}{l|l} Original & Lorem \textcircled{1} ipsum \textcircled{2} dolor \\ Modified & Lorem \numcircledmod{1} ipsum \numcircledmod{2} dolor\\ TikZ & Lorem \numcircledtikz{1} ipsum \numcircledtikz{2} dolor\\ Picture & Lorem \numcircledpict{1} ipsum \numcircledpict{2} dolor\\ Ding serif & Lorem \ding{172} ipsum \ding{173} dolor\\ Ding sans & Lorem \ding{192} ipsum \ding{193} dolor\\ \end{tabular} \end{document} 

{1} Se alguém decidir escrever tal coisa, me avise e irei incluí-lo nesta resposta sem nenhum custo adicional, mas esteja ciente de que a postagem será posteriormente marcada como \textcircled{18+} para proteger os fracos de coração.

Comentários

  • resumo excelente, muito bem! Postagens como esta fazem este site valer a pena.
  • @Yiannis Faz ‘ faz algum tempo que postei a pergunta, mas agora só encontrei tempo para polir o sumário. Espero que seja útil para pessoas com o mesmo problema.
  • Você diz, ” O espaçamento ao redor do símbolo parece correto, embora em execução livre texto o círculo deve, de preferência, ter um ajuste mais apertado em torno do número. ” Isso é facilmente corrigido alterando inner sep=2pt para inner sep=1pt na \circled definição de comando.
  • @Matt: Claro – minha intenção aqui era apontar um problema estético, mas acho Não fui ‘ muito claro sobre isso. As informações sobre o que precisa ser mudado agora são mencionadas no post. Obrigado.
  • @MartinTapankov O problema é resolvido com raisebox desde que cada chamada seja precedida por \ protect.

Resposta

A solução mais rápida seria usar o comando \raisebox. Eu brinquei um pouco com isso e parece que reduzir o texto em 0,9 pt coloca a figura aproximadamente no centro:

 \textcircled{\raisebox{-0.9pt}{8}} 

Você poderia brincar com ele para obter o centro absoluto, mas está definitivamente entre 0,9 e 1 pt. Tive a ideia aqui . Parece que o comando \textcircled funciona melhor para texto! Mas, de qualquer maneira, isso deve resolver seu problema.

Comentários

  • Que ‘ vai mudar a linha de base dos números que podem não ser desejáveis. Mas talvez com um \raisebox externo para aumentar todo o número circulado, as linhas de base poderiam ser mantidas.
  • Mais oui! Eu deveria ter pensado nisso sozinho. Obrigado! Eu ‘ vou esperar um pouco por mais algumas sugestões antes de marcar como aceito.
  • @TH. Verdade, mas isso não ‘ para mim – os números não aparecem no texto de execução livre, mas são cabeçalhos para colunas de tabela ou usados para rotulagem.
  • Mas, na verdade, a saída \textcircled já tem uma linha de base inferior com ou sem \raisebox. Portanto, se o autor prefere que seja totalmente limpo, ele deve escolher pifont. Com um \raisebox externo, o máximo é um aumento de 0,5 pt, que retorna o círculo à sua posição original, que não está alinhada com o texto. Aumentar tudo além de 0,5 pt começa a mudar o número, não o círculo, negando os esforços iniciais. Portanto, se o autor deseja um bom \textcircled, aqui está ‘ um: \raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {8}} } . Na verdade, isso é muito bom.
  • @Martin: você também pode receber uma sugestão do TikZ. 😉

Resposta

morbusg já mencionado que algumas fontes têm números circundados como glifos Unicode e mostraram como incorporá-los diretamente. Algumas fontes fornecem uma interface mais amigável para acessar os números, por exemplo, Linux Libertine e Junicode. Obviamente, isso significa que estamos nos desviando de sua exigência de usar o Computer Modern. A vantagem desses números Unicode presumivelmente é que eles foram criados por um designer de fontes, então não deve haver nenhuma necessidade de ajustes finos.

Aqui está uma prova de conceito simples (você também precisa tenha o junicode pacote instalado):

\documentclass{article} \usepackage{fontspec} \usepackage{libertine} \begin{document} \libertineGlyph{uni2460} \libertineGlyph{uni24F5} \libertineGlyph{uni2776} {\fontspec[Ligatures=Discretionary]{Junicode}[1] [[1]] <1>} \end{document} 

saída

Esses métodos são descritos nas respectivas documentações.

Esta é uma maneira ainda mais confortável de acessar esses conjuntos de números. Os números duplamente circulados estão (por Unicode) disponíveis de 1 a 10, os outros de 0 a 20.

\documentclass{article} \usepackage{fontspec} \usepackage{libertine} \usepackage{pgf} % for the calculation % \libcirc and \libcircblk display their "0" if the parameter is out of range \newcommand{\libcirc}[1]{\pgfmathparse{ ifthenelse(#1 > 0 && #1 < 21, Hex(9311+#1), Hex(9450) }\libertineGlyph{uni\pgfmathresult}} \newcommand{\libcircdbl}[1]{\pgfmathparse{Hex(9460+#1)}\libertineGlyph{uni\pgfmathresult}} \newcommand{\libcircblk}[1]{\pgfmathparse{ ifthenelse(#1 > 0 && #1 < 11, Hex(10101+#1), ifthenelse(#1 > 10 && #1 < 21, Hex(9450-10+#1), Hex(9471) ) ) }\libertineGlyph{uni\pgfmathresult}} \newcommand{\juncirc}[1]{{\fontspec[Ligatures=Discretionary]{Junicode}[#1]}} \newcommand{\juncircdbl}[1]{{\fontspec[Ligatures=Discretionary]{Junicode}[[#1]]}} \newcommand{\juncircblk}[1]{{\fontspec[Ligatures=Discretionary]{Junicode}<#1>}} \usepackage{pgffor} % just for the demo loop \setlength{\parindent}{0pt} % just for the demo \begin{document} \section{Linux Libertine} \foreach \x in {0,...,20} {\libcirc{\x} } \foreach \x in {1,...,10} {\libcircdbl{\x} } \foreach \x in {0,...,20} {\libcircblk{\x} } \section{\fontspec{Junicode}Junicode} \foreach \x in {0,...,20} {\juncirc{\x} } \foreach \x in {1,...,10} {\juncircdbl{\x} } \foreach \x in {0,...,20} {\juncircblk{\x} } \end{document} 

saída

Comentários

  • Acho que isso não funciona com pdflatex.
  • @moose Sim. Tenho que verificar se o primeiro bit de código funciona com o atual libertine em absoluto (mas o pdfLaTeX deve servir), o segundo bit é apenas XeLaTeX / LuaLaTeX, devo colocá-lo na resposta também.

Resposta

PGF é um exagero para este aplicativo, mas se você já o carregou, pode usá-lo:

\documentclass{article} \usepackage{tikz} \newcommand{\pgftextcircled}[1]{ \setbox0=\hbox{#1}% \dimen0\wd0% \divide\dimen0 by 2% \begin{tikzpicture}[baseline=(a.base)]% \useasboundingbox (-\the\dimen0,0pt) rectangle (\the\dimen0,1pt); \node[circle,draw,outer sep=0pt,inner sep=0.1ex] (a) {#1}; \end{tikzpicture} } \newcommand{\pangram}{\noindent{The \textcircled{0} quick \textcircled{1} brown \textcircled{2} fox \textcircled{3} jumps \textcircled{4} over \textcircled{5} the \textcircled{6} lazy \textcircled{7} dog.} } \begin{document} \begin{minipage}{0.5\textwidth} \pangram \bigskip \let\textcircled=\pgftextcircled \pangram \end{minipage} \end{document} 

saída do snippet

Como você pode ver, há algum espaço extra ao redor dos círculos em comparação com \textcircled mas não é ruim.

edição pré-pós: vejo que Stefan e morbusg me venceram. Muito bem.

Comentários

  • Acho que um processo externo é realmente um exagero para algo que pode ser feito dentro do LaTeX. Você pode simplesmente construí-lo como \ newcommand {\ Ring} [1] {\ raisebox {-1pt} {\ begin {tabular} {@ {} c @ {}} {\ small # 1} \ [ -11.5pt] \ BigCircle \ end {tabular}}}. O autoajuste das dimensões é deixado como um exercício para o leitor 🙂
  • Peter, que processo externo?
  • @ u0b34a0f6ae: Acho que Peter está se referindo ao fato de que tikz usa um monte de \special comandos adicionados depois que o TeX processa a entrada. Portanto, é ‘ “externo” ao sistema normal de digestão TeX.

Resposta

De symbols.pdf, parece que pifont pode fazer o que quiser com \ding{172} a \ding{181} ou \ding{192} a \ding{201}.

Ou o igo pacote com \whitestone{1} a \whitestone{99}, embora seja destinado à composição de placas Go.

Parece que a solução foi encontrada, mas aqui está “uma comparação simples.

\documentclass{article} \usepackage{pifont} \def\X#1{% #1% \textcircled{#1}% \raisebox{.9pt}{\textcircled{\raisebox{-.9pt}{#1}}}% \ding{\numexpr171+#1\relax}% } \begin{document} \X0\X1\X2\X3\X4\X5\X6\X7\X8\X9 \end{document} 

insira a descrição da imagem aqui

Comentários

  • Esta é uma ótima solução. No entanto, os pifonts são bastante compactados, em comparação com a saída \textcircled. O pro, porém, é que os pifonts estão alinhados com o texto, o que pode ser uma coisa boa para o autor.
  • @TH: Legal. O que o pacote textcomp faz?
  • @Jimi: Achei que fosse necessário para \textcircled. Eu estava errado. (Eu estava olhando a Tabela 17 de Symbols.pdf e ela observa que textcomp é necessário para \newtie, mas não ‘ t lendo com bastante cuidado.) Eu ‘ atualizei o código.
  • @PatrickT Obrigado pela imagem. É ‘ uma boa adição.

Resposta

O mathdesign pacote define \figurecircled que tem melhor espaçamento para números do que \textcircled sim.

O pacote mathdesign é incompatível com amsfonts e amssymb mas se você estiver usando uma fonte mathdesign de qualquer maneira, isso não é um problema.

Comentários

  • Esta resposta foi rejeitada? Quem fez isso poderia explicar por que eles acham que essa é uma solução ruim para o problema?
  • Eu não ‘ não votei contra você, mas recebi um erro com um simples arquivo de teste. Você pode fornecer um MWE? Minha mensagem de erro: ! TeX capacity exceeded, sorry [input stack size=5000]. \figurecircled ->\MDB-cmd \figurecircled \MDB\figurecircled l.14 ...footnote{of the emergency} $\figurecircled {1}$ ! ==> Fatal error occurred, no output PDF file produced!

Resposta

@Stefan ” a resposta é boa, no entanto, eu melhorei a resposta dele.

Em primeiro lugar, se \circled{1} e \circled{10} forem colocados juntos , os dois círculos não terão o mesmo tamanho, então adicionei um parâmetro opcional ao comando \circled. O parâmetro opcional foi reagrupado como um marcador de posição para garantir que esses círculos apareçam no mesmo tamanho.

Além disso, como eu “usei \ifblank, que é fornecido pelo pacote etoolbox, para verificar se o parâmetro opcional foi fornecido, Usei \robustify para tornar o comando robusto. Isso contornou a desvantagem de usar \DeclearRobustCommand, mencionado por @Stefan em um comentário de sua resposta. Assim, o \protact não é mais necessário.


Código:

\documentclass{article} \usepackage{enumitem} \usepackage{tikz} \usepackage{etoolbox} \newcommand{\circled}[2][]{% \tikz[baseline=(char.base)]{% \node[shape = circle, draw, inner sep = 1pt] (char) {\phantom{\ifblank{#1}{#2}{#1}}};% \node at (char.center) {\makebox[0pt][c]{#2}};}} \robustify{\circled} \begin{document} \mbox{}\rlap{\rule{.7\linewidth}{.4pt}}% The original version: \circled{1} and \circled{10}. \mbox{}\rlap{\rule{.7\linewidth}{.4pt}}% The improved version: \circled[10]{1} and \circled[10]{10}. \newcommand{\dcircled}[1]{\circled[00]{#1}} \begin{enumerate}[label=\dcircled{\arabic*}, noitemsep] \item I \item am \item happy \item to \item join \item with \item you \item today \item in \item what \item will \item go \item down \item in \item history \item as \item the \item greatest \item demonstration \item for \item freedom \item in \item the \item history \item of \item our \item nation. \end{enumerate} \end{document} 

Resultado:

Comentários

  • você conhece a opção minimum size para nós?
  • @percusse Desculpe, mas Eu não ‘ não entendo você.
  • Você pode definir um tamanho mínimo para nós do círculo sem uma caixa ou fantasma com tamanho uniforme.
  • @percusse Isso ‘ é uma boa sugestão , entretanto, não ‘ acho que você entendeu a ideia em minha postagem. Projetei este parâmetro opcional para uniformizar o tamanho dos círculos, uma vez que círculos de tamanhos diferentes alinhados juntos darão uma aparência hostil.

Resposta

Ainda mais fácil:

\textcircled{\small{2}} 

ou

{\large \textcircled{\small 2}} 

ou

{\Large \textcircled{\normalsize 2}} 

[ed. Segletes, fornecendo MWE & imagem]

\documentclass{article} \usepackage{enumitem} \begin{document} \begin{enumerate}[label=\large\protect\textcircled{\small\arabic*}] \item First item \item Second item \item Third item \item Fourth item \end{enumerate} \textcircled{\small{2}} or {\large \textcircled{\small 2}} or {\Large \textcircled{\normalsize 2}} \end{document} 

Renderização LaTeX do arquivo .tex acima

Comentários

  • Isso pode funcionar quando o círculo não está rodeado por texto e o tamanho da fonte do número não é um problema – mas eu ‘ prefiro usar uma das outras soluções em vez disso.
  • Podemos inverter as cores dentro do círculo?

Responda

isto a resposta foi convertida em um pacote em CTAN: https://ctan.org/pkg/circledsteps

As respostas aqui são todas nice, e especialmente o tikz é altamente configurável. Mas tem um problema: você não pode “usá-lo dentro de outros tikzpicture s. Então, juntei algumas coisas e implementei:

 \documentclass{article} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{tikz} \makeatletter % Based on https://tex.stackexchange.com/questions/7032/good-way-to-make-textcircled-numbers % \usepackage{pict2e,picture} \pgfkeys{/csteps/inner ysep/.initial=4pt, /csteps/inner xsep/.initial=4pt, /csteps/inner color/.initial=red, /csteps/outer color/.initial=blue, } \newsavebox\csteps@CBox \newlength\csteps@XLength \newlength\csteps@YLength \newlength\csteps@YDepth \newlength\csteps@tmplen \def\csteps@CircledParam#1#2{\sbox\csteps@CBox{#2}% \csteps@XLength=\wd\csteps@CBox\advance\csteps@XLength by\pgfkeysvalueof{/csteps/inner xsep}\relax \csteps@tmplen=\pgfkeysvalueof{/csteps/inner ysep}\relax \csteps@YDepth=\dp\csteps@CBox\advance\csteps@YDepth by 0.5\csteps@tmplen\relax \csteps@YLength=\ht\csteps@CBox\advance\csteps@YLength by\dp\csteps@CBox\advance\csteps@YLength by\pgfkeysvalueof{/csteps/inner ysep}\relax \typeout{DBG:#2\space X\space\the\csteps@XLength\space Y:\the\csteps@YLength\space D:\the\csteps@YDepth}% \raisebox{-#1\csteps@YDepth}{% \ifdim\csteps@XLength>\csteps@YLength \makebox[\csteps@XLength]{% X bigger than Y \makebox(0,\csteps@YLength){% \color{\pgfkeysvalueof{/csteps/outer color}}\put(0,0){\oval(\csteps@XLength,\csteps@YLength)}% }% \makebox(0,\csteps@YLength){% \put(-.5\wd\csteps@CBox,0){\textcolor{\pgfkeysvalueof{/csteps/inner color}}{#2}}% }}% \else \makebox[\csteps@YLength]{% \makebox(0,\csteps@YLength){% \color{\pgfkeysvalueof{/csteps/outer color}}\put(0,0){\circle{\csteps@YLength}}% }% \makebox(0,\csteps@YLength){% \put(-.5\wd\csteps@CBox,0){\textcolor{\pgfkeysvalueof{/csteps/inner color}}{#2}}% }}% \fi }% } \def\Circled#1{\csteps@CircledParam{1}{#1}} \def\CircledTop#1{\csteps@CircledParam{0}{#1}} \makeatother \begin{document} This is normal text \Circled{1} is on the baseline, \CircledTop{2} is on top. \par\bigskip This is more evident if you have descendent, like p:\Circled{p} and \CircledTop{p}. \par\bigskip For big horizontal things it becomes oval: \Circled{200} or \CircledTop{199}. \par\bigskip Inside \texttt{tikz} \begin{tikzpicture}[scale=0.8, rotate=30, text width=3cm, transform shape] \node [draw,color=green!50!black]{text \Circled{1}}; \end{tikzpicture} \par\bigskip \tikzset{/csteps/inner ysep=10pt} \tikzset{/csteps/inner xsep=10pt} More space: \Circled{1} \Circled{2} \Circled{p} \Circled{200} \Circled{199}. \end{document}  

Exemplo de uso

Comentários

  • Parece ótimo! (+1)

Responda

com os comandos de imagem padrão:

\documentclass{article} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{pict2e,picture} \newsavebox\CBox \newlength\CLength \def\Circled#1{\sbox\CBox{#1}% \ifdim\wd\CBox>\ht\CBox \CLength=\wd\CBox\else\CLength=\ht\CBox\fi \makebox[1.2\CLength]{\makebox(0,1.2\CLength){\put(0,0){\circle{1.2\CLength}}}% \makebox(0,1.2\CLength){\put(-.5\wd\CBox,0){#1}}}} \begin{document} \Huge foo \Circled{1} \Circled{2} \Circled{ABC} \end{document} 

texto alternativo

Resposta

Com Plain (topei com isso por acaso e me lembrei desta pergunta):

\def\circled#1{{\ooalign{\hfil\lower.1ex\hbox{#1}\hfil\crcr\Orb}}} $\circled1 \circled2 \circled3 \ldots \circled9 \quad \circled{23}$ \bye 

circlednums

Com XeTeX:

\font\circled="Arial Unicode MS" {\circled ➀} Didn"t occur to me {\circled ➄} earlier that some fonts have {\circled ➇} these. \bye 

Ou talvez com TikZ:

\input tikz baseline ain"t so pretty \par baseline ain"t so pretty \par baseline \tikz \node[circle,draw] {2}; ain"t \par so pretty \tikz[baseline] \node[circle,draw] {2}; baseline \par ain"t so pretty baseline \par ain"t \tikz[inner sep=1pt,baseline=-.75ex] \node[circle,draw] {2}; so pretty \par baseline \tikz[inner sep=2pt,baseline=-.75ex] \node[circle,draw] {2}; ain"t so \par pretty baseline ain"t so \par pretty \tikz[inner sep=.25ex,baseline=-.75ex] \node[circle,draw] {2}; baseline \par ... actually, now it sorta is \par baseline ain"t so pretty \par baseline ain"t so pretty \bye 

mg src =” https://i.imgur.com/LAqbN.png “alt =” “title =” Hosted by imgur.com “/>

Droga, Stefan chegou antes de mim com uma melhor.

Resposta

Aqui está uma solução \pdfliteral. Funciona apenas com números únicos.

\def\circled#1{% #1% \pdfliteral{ q .5 w 10 0 0 10 -2.5 3.5 cm .05 w .5 0 m .5 .276 .276 .5 0 .5 c -.276 .5 -.5 .276 -.5 0 c -.5 -.276 -.276 -.5 0 -.5 c .276 -.5 .5 -.276 .5 0 c h S Q }% } \circled{1} a \circled{2} b \circled{3} c \circled{10} \bye 

insira a descrição da imagem aqui

Comentários

  • Por que as transformações de coordenadas?
  • @percusse Na verdade, acabei de copiar o código aqui e modifiquei um pouco. Se você puder fornecer quaisquer recursos para aprender mais sobre codificação de PDF, eu ficaria muito feliz.
  • Na verdade, é PostScript, mas o PDF também oferece suporte a muitos objetos gráficos. Portanto, é ‘ um pouco complicado entender o conjunto de todos os operadores suportados em PDF. Mas pelo menos para começar a ler este código, você pode usar o guia de referência adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/… . Também na especificação ISO (tabela 59 em adobe.com/devnet/pdf/pdf_reference.html ), você pode reconhecer os operadores TikZ mapeados para o frontend;). O problema inicial a entender é configurar a caixa delimitadora, o resto é a notação PS usual.

Resposta

Usando pifont pacote e símbolos de \ding{172} a \ding{211} você facilmente tem excelentes números circulados, mas se quiser circulados números maiores que 10, temos um problema. Como mostrado por outros usuários do stackexchange aqui, podemos resolver o problema se os números não forem muito grandes, mas as coisas ficaram difíceis (códigos LaTeX complexos) e podemos ter problemas se estivermos escrevendo dentro de um texto (se o círculo ficou grande, o LaTeX pode ser forçado a aumentar o espaço entre as linhas ou talvez a sobrepor o círculo nas linhas adjacentes superiores e inferiores): as coisas são um pouco mais simples se quisermos apenas o número circulado em uma lista de itens. Essa falta de flexibilidade pode ser, em alguns casos, incômoda. Uma solução razoável parece usar o pacote tcolorbox : após as tentativas, descobri que simplesmente temos que adicionar no preâmbulo este

\usepackage{tcolorbox} \newcommand{\ciao}[1]{{\setlength\fboxrule{0pt}\fbox{\tcbox[colframe=black,colback=white,shrink tight,boxrule=0.5pt,extrude by=1mm]{\small #1}}}} 

e chame no documento o comando \ ciao quando quisermos um número “circulado” (exemplo: \ ciao {12} irá “circular” o número 12). A propósito, o uso de fbox na linha do preâmbulo é importante porque sem ela, a caixa arredondada poderia se projetar para fora da linha à esquerda ou à direita quando eles estão na margem da linha: isso seria muito inestético.

Resumindo, vejo nesta solução 3 prós e 1 contras:

  • prós : código simples, bom funcionamento dentro de um texto também, flexibilidade (também números grandes & no caso de podermos brincar facilmente com bordas ou cores: veja 0,5pt ou preto & branco na linha do preâmbulo).
  • cons : não temos círculos, mas uma caixa arredondada, mas acho que este é um meio-termo razoável.

Um exemplo de aplicação deste método é

Quel ramo del lago di Como \ciao{1}, che volge a mezzogiorno, tra due catene \ciao{20} non interrotte di monti, tutto a seni e a golfi, a seconda dello sporgere e del rientrare di quelli, vien, quasi a un tratto, a restringersi, e a prender corso \ciao{252} e figura di fiume, tra un promontorio a destra, e un"ampia costiera dall"altra parte; \ciao{3432} e il ponte che ivi congiunge le due rive, par che renda ancor più sensibile all"occhio questa trasformazione, e segni il punto in cui il lago cessa, e l"Adda ricomincia, per ripigliar poi nome di lago dove le rive, allontanandosi di nuovo, lascian l"acqua distendersi e rallentarsi in nuovi golfi e in nuovi seni. 

que dá

insira a descrição da imagem aqui

observe que os números não se projetam e que o espaço entre as linhas é sempre o mesmo: não importa se temos um número ou não. Resumindo, esses números quase circulados funcionam muito bem mesmo se estiverem dentro de um texto.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *