O modalitate bună de a face numere \ textcircled?

Această întrebare a condus la un nou pachet:
circledsteps

Încerc să fac niște numere frumoase într-un cerc, folosind comanda simplă:

\textcircled{1} 

Cu toate acestea, cercul este aliniat greșit pe verticală cu numărul și arată puțin cam neglijent:

text alternativ

Orice sugestii cum se poate Reglez alinierea verticală astfel încât numerele să pară mai centrate în raport cu cercurile? Sau, dacă aceasta nu este o opțiune, ce alte modalități de a obține aceleași rezultate sunt posibile?

Le voi folosi doar pe acelea pentru numere și în foarte puține locuri, așa că reglarea manuală pe glif este o opțiune.

Eu „folosesc pdfLaTeX cu Computer Modern, dacă asta contează.

Comentarii

  • Am primit două răspunsuri bune aici, pentru mai puțin de 30 de minute utes (voi sunteti rapizi!). ‘ probabil voi face un răspuns comunitar wiki care să rezume toate opțiunile într-una din aceste zile, poate că vor apărea și alte soluții între timp.
  • I ‘ m lipsit de somn, ‘ de ce!
  • Ce pachet oferă \textcircled?
  • @ Matthew: Se pare că este încorporat cu LaTeX. Funcționează din cutie.
  • Puteți utiliza Unicode. U + 2460-2473 pentru 1 până la 20, U + 24EA pentru 0, U + 3251-325F pentru 21-35 și U + 32B1-32BF pentru 36-50.

Răspuns

Aici „soluția 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} 

text alternativ

Este doar un nod. Opțiunile TikZ sunt utilizate pentru a alinia linia de bază, pentru a regla dimensiunea și pentru a obține forma cercului. Sunteți liber să alegeți alte opțiuni în ceea ce privește dimensiunea sau grosimea cercului (opțiunea thick). Există mai multe: de exemplu, puteți numi chiar nodurile printr-un alt argument pentru a le conecta prin săgeți mai târziu.

Dacă vreți să o folosiți pentru o listă enumerată, de exemplu, este ușor, dar trebuie protejat:

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

alt text

Comentarii

  • Exemplu dulce! Am avut probleme în trecut folosind Exemple TikZ în linie, dar acum văd că este rezolvat de baseline=(char.base). Cool.
  • @Stefan: poate ar trebui să înlocuiți \newcommand de \DeclareRobustCommand, ca și cum \protect nu mai este necesar, ceea ce este mai ușor de utilizat.
  • Apoi, ar trebui să utilizați \ newcommand pentru a declara o comandă goală și apoi utilizați \ DeclareRobustCommand. În acest fel, o comandă existentă va emite o eroare.
  • @LuisFelipeVillavicencioLopez Sigur! Comentariile sunt nu este cel mai bun pentru discuțiile de cod. Poate postați o întrebare nouă sau lăsați ‘ să vorbească la comunitatea LaTeX unde postez zilnic.
  • Acest lucru este frumos, dar problema este că nu poate ‘ să poată fi utilizat în interiorul unui \tikzpicture — ca, pentru de exemplu, un text de nod sau o etichetă. Există vreo soluție pentru un ” universal ” numere frumoase încercuite? Pentru referință, consultați tex.stackexchange.com/questions/496348/…

Răspuns

Am fost plăcut surprins de cât de mulți oameni au decis să încerce și au apărut o mulțime de soluții interesante. Conform tradiției, acest răspuns va fi un wiki comunitar și va rezuma și compara toate soluțiile sugerate.


Prin prezenta sugerez trei criterii de evaluare diferite, fiecare gradate de la 1 la 5:

  • Simplitate . Aceasta este o măsură cât de ușor este să folosiți soluția propusă. Puncte deduse pentru utilizarea pachetelor suplimentare sau definirea oricărui lucru în afară de o macrocomandă simplă de conveniență.
  • Flexibilitate . Aceasta include în primul rând cât de ușor este de utilizat acest lucru în alte contexte, în acest caz diferite forme, dimensiuni și grosimi ale cadrului.
  • Precizie . Pur și simplu, cât de plăcut este aspectul estetic al soluției, în special cât de bine gliful este centrat în cerc și cum se potrivește cu textul care rulează liber.
    1. Soluția raisebox.

      Mulțumim lui Jimi Oke pentru degetele rapide. Acest lucru a venit mai întâi și este cel care îmi place în mod deosebit pentru aplicația pe care o aveam în minte. Vine la fel de ușor ca:

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

      Nimic mai mult decât atât. În ceea ce privește simplitatea, nu devine mai bun decât acesta.Solid 5/5 , deoarece nu sunt necesare pachete suplimentare, iar definiția dificilă poate fi abstractizată în mod trivial într-un singur liner \def.

      Din punct de vedere flexibil, această soluție este destul de scăzută, deoarece nu aveți control asupra dimensiunii cercului sau parametrilor (sunt sigur că unii hackeri TeX ar dovedește-mi că am greșit, dar pentru dragostea $ DEITY , scutește-ne de asemenea urâciuni). 2/5 este bine meritat aici. {1}

      Problema acurateței este subiectivă ca întotdeauna, dar ar trebui să vă jucați cu distanțele verticale pentru a o face corect ™ pentru tipul de caractere pe care îl aveți au selectat. 2/5 .

    2. ding -y solution.

      Aceasta a venit de la TH. care sugerează utilizarea unor glifuri simbol predefinite. Documentul omniscient pentru simboluri-a4 spune că unicul mod adevărat de a face acest lucru este de a utiliza:

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

      Sau chiar și nomenclatura de bord Go:

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

      În ceea ce privește simplitatea, această valoare se calculează la 4.5 / 5 , deși sunt „reticent să-i dau o greșeală 5 din cauza pachetelor suplimentare implicate.

      Acest lucru nu este deloc flexibil. Dacă nu vă plac glifele, sunteți singur. 1/5 .

      Glifele în sine sunt bine concepute, așa cum ar trebui să ne așteptăm, iar numerele sunt vizual bine aliniat cu cercurile. Deși dacă aveți un tip de caractere cu un stil distinct, este posibil ca fontul numerelor să nu se potrivească bine cu textul.

    3. Obligatoriu tikz soluție.

      Ahh, întotdeauna există asta, nu este. Acest lucru se datorează lui 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} 

      Personal, nu sunt în tikz (știu , Ar trebui să-l învăț într-una din aceste zile), așa că a merge cu acest lucru ar fi o utilizare unică a pachetului pentru mine, pe care aș vrea să o evit. Nu pot să dau mai mult de 2/5 aici, dar tikz fanboiz (și galz!) ar trebui să facă acest lucru până la 4/5 .

      în ceea ce privește flexibilitatea: aceasta este adevărata afacere. Stefan a demonstrat chiar cum să folosească simbolurile încercuite cu liste enumerate, ale tuturor lucrurilor. Sunt cu siguranță posibile diferite forme ale cadrelor, cu un grad diferit de potrivire în jurul glifului. Indiscutabil 5/5 .

      Alinierea liniei de bază este de top, fără să se joace cu unele ajustări manuale, ceea ce este destul de frumos. Spațierea în jurul simbolului arată bine, deși în textul liber, cercul ar trebui să aibă, de preferință, o potrivire mai strânsă în jurul numărului, care poate fi realizat jucând cu parametrul inner sep în definiția comenzii. 5/5 aici.

    4. pict2e / picture soluție

      O adăugare târzie de Herbert propune folosește câteva primitive de bază din pachetele picture și pict2e. Iată:

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

      În ceea ce privește simplitatea, acest lucru nu se evaluează prea bine. Arată puțin complicat, deși cu siguranță de înțeles după ce l-ați studiat și îl folosește două pachete suplimentare. 2/5 este un scor rezonabil aici.

      Flexibilitatea nu este chiar construită- în, dar este cu siguranță posibil. Raza cercului poate fi ajustată, modificând factorul 1.5, iar reglarea de bază poate fi jucată cu. 3,5 / 5 .

      Așa cum se arată în această definiție, linia de bază a textului înconjurător este tangentă la cerc în loc să fie aliniată cu cercul baza numărului. Acest lucru ar putea fi de dorit în anumite circumstanțe, dar cifrele arată un pic în afara acestui loc. Rezultate mai bune se pot obține cu unele calcule suplimentare la plasarea casetelor și un 3,5 / 5 este dat aici pentru reflec acest potențial.

    5. Cealaltă soluție tikz obligatorie

      Matthew Leingang și morbusg și-au încercat mâna în acest sens și, deși eforturile lor sunt cu siguranță apreciate, cred că soluția lui Stefan este mai simplă. Sunt recunoscător pentru efort (și smerenia ta) și am votat ambele răspunsuri.

    Scor final:

    • Simplitate : raisebox
    • Flexibilitate : tikz
    • Precizie : legat între tikz și ding

    Per total: tikz, fără ezitare ( aclamare din partea publicului, pălării aruncate, batiste fluturate și toate astea).

    În cele din urmă, un cod de testare:

    \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} Dacă cineva decide să scrie un astfel de lucru, anunțați-mă și îl voi include în acest răspuns fără costuri suplimentare, dar fiți informat că mesajul va fi marcat ulterior \textcircled{18+} pentru a proteja cei slabi ai inimii.

    Comentarii

    • rezumat excelent, bine făcut! Postări de acest fel fac ca acest site să merite.
    • @Yiannis ‘ a trecut ceva timp de când nu am postat întrebarea, dar am găsit timp doar acum pentru a lustrui rezumatul. Sper că va fi de folos persoanelor cu aceeași problemă.
    • Spuneți, ” Spațierea în jurul simbolului arată bine, deși este în funcțiune liberă text cercul ar trebui să aibă de preferință o potrivire mai strânsă în jurul numărului. ” Acest lucru este ușor de remediat schimbând inner sep=2pt la inner sep=1pt în \circled definiția comenzii.
    • @Matt: Sigur – intenția mea aici a fost să subliniez o problemă estetică, dar cred Nu am fost ‘ destul de clar în acest sens. Informațiile despre ceea ce trebuie schimbat sunt acum menționate în postare. Mulțumesc.
    • @MartinTapankov Problema este rezolvată cu raisebox, cu condiția ca fiecare apel să fie precedat de \ protect.

Răspuns

Cea mai rapidă soluție ar fi utilizarea comenzii \raisebox. M-am jucat puțin cu el și se pare că scăderea textului cu 0,9pt pune cifra aproximativ în centru:

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

Ai putea juca cu el pentru a obține centrul absolut, dar este cu siguranță între 0,9 și 1pt. Am primit ideea aici . Se pare că comanda \textcircled funcționează cel mai bine pentru text! Dar, oricum, acest lucru ar trebui să vă rezolve problema.

Comentarii

  • ‘ se va schimba linia de bază a numerelor care ar putea să nu fie de dorit. Dar poate că cu un \raisebox exterior pentru a crește întregul număr încercuit, liniile de bază ar putea fi menținute.
  • Mais oui! Ar fi trebuit să mă gândesc și eu la asta. Mulțumiri! ‘ voi aștepta puțin alte sugestii, înainte de a marca acest lucru ca acceptat.
  • @TH. Este adevărat, dar asta nu ‘ contează pentru mine – numerele nu apar în textul care rulează gratuit, ci sunt mai degrabă anteturi pentru coloanele tabelului sau utilizate pentru etichetare.
  • Dar, de fapt, ieșirea \textcircled are deja o linie de bază inferioară cu sau fără \raisebox. Deci, dacă autorul preferă totul la culoare, atunci ar trebui să meargă pentru pifont. Cu un \raisebox exterior, maximul este o creștere de 0,5 puncte, care readuce cercul în poziția sa inițială, care nu este însă la fel cu textul. Creșterea a tot ce depășește 0,5pt începe să schimbe numărul, nu cercul, negând eforturile inițiale. Astfel, dacă autorul dorește un bun \textcircled, atunci iată ‘ unul: \raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {8}} } . Acest lucru este de fapt destul de bun.
  • @Martin: s-ar putea să primiți și o sugestie TikZ. 😉

Răspuns

morbusg deja menționat că unele fonturi au numere înconjurate ca glifuri Unicode și au arătat cum să le încorporeze direct. Unele fonturi oferă o interfață mai ușor de utilizat pentru accesarea numerelor, de ex. Linux Libertine și Junicode. Evident, aceasta înseamnă că ne abatem de la cerința dvs. de a utiliza Computer Modern. Avantajul acestor numere Unicode este probabil că au fost create de un proiectant de fonturi, deci nu ar trebui să fie nevoie de reglaje fine.

Iată o simplă dovadă a conceptului (De asemenea, trebuie să au pachetul junicode instalat):

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

ieșire

Aceste metode sunt descrise în documentațiile respective.

Iată un mod și mai confortabil de a accesa aceste seturi de numere. Numerele dublate în cerc sunt (per Unicode) disponibile de la 1 la 10, celelalte de la 0 la 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} 

ieșire

Comentarii

  • Cred că acest lucru nu funcționează cu pdflatex.
  • @moose Da .. Trebuie să verific dacă primul bit de cod funcționează cu actualul libertine deloc (dar apoi pdfLaTeX ar trebui să fie bine), al doilea bit este doar XeLaTeX / LuaLaTeX, ar trebui să pun asta și în răspuns.

Răspuns

PGF este suprasolicitat pentru această aplicație, dar dacă îl aveți deja încărcat, îl puteți folosi:

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

ieșire fragment

După cum puteți vedea, există un spațiu suplimentar în jurul cercurilor comparativ cu \textcircled dar nu este rău.

editare pre-post: văd că Stefan și morbusg m-au învins. Bine.

Comentarii

  • Cred că un proces extern este într-adevăr exagerat pentru ceva ce poate fi făcut în cadrul LaTeX. Puteți să o construiți la fel de simplu ca și \ newcommand {\ Ring} [1] {\ raisebox {-1pt} {\ begin {tabular} {@ {} c @ {}} {\ small # 1} \ [ -11.5pt] \ BigCircle \ end {tabular}}}. Reglarea automată a dimensiunilor este lăsată ca exercițiu pentru cititor 🙂
  • Peter, ce proces extern?
  • @ u0b34a0f6ae: Cred că Peter se referă la faptul că tikz folosește o grămadă de comenzi \special adăugate după ce TeX procesează intrarea. Deci este ‘ „extern” sistemului normal de digestie TeX.

Răspuns

Din simboluri.pdf, se pare că pifont poate face ceea ce doriți cu \ding{172} prin \ding{181} sau \ding{192} prin \ding{201}.

Sau igo pachet cu \whitestone{1} prin \whitestone{99}, deși acest lucru este destinat pentru tipărirea plăcilor Go.

Se pare că soluția a fost găsită, dar aici „o comparație simplă.

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

introduceți descrierea imaginii aici

Comentarii

  • Aceasta este o soluție excelentă. Cu toate acestea, pifonturile sunt destul de stricate, în comparație cu ieșirea \textcircled. Totuși, pro este că pifont-urile sunt la același nivel cu textul, ceea ce poate fi un lucru bun pentru autor.
  • @TH: Frumos. Ce face pachetul textcomp?
  • @Jimi: Am crezut că este necesar pentru \textcircled. Am fost incorect. (Mă uitam la Tabelul 17 din Symbols.pdf și notează că textcomp este necesar pentru \newtie, dar nu eram ‘ nu citesc suficient de atent.) Am ‘ am actualizat codul.
  • @PatrickT Vă mulțumim pentru imagine. Este ‘ un bun adaos.

Răspuns

pachetul div id = „bab14854cc”>

mathdesignpachetul definește\figurecircledcare are o distanță mai bună pentru numere decât\textcirclednu.

Pachetul mathdesign este incompatibil cu amsfonts și amssymb dar dacă oricum folosiți un font mathdesign, nu este o problemă.

Comentarii

  • Acest răspuns a fost respins? Ar putea cineva care a făcut acest lucru să explice de ce crede că aceasta este o soluție proastă la problemă?
  • Nu ‘ v-am votat în jos, dar am primit o eroare fișier de testare. Puteți furniza un MWE? Mesajul meu de eroare: ! 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!

Răspuns

@Stefan ” Răspunsul este bun, totuși, i-am îmbunătățit răspunsul.

În primul rând, dacă \circled{1} și \circled{10} sunt plasate împreună , cele două cercuri nu vor avea aceeași dimensiune, așa că am adăugat un parametru opțional la comanda \circled. Parametrul opțional a fost regradat ca substituent pentru a mă asigura că aceste cercuri apar în aceeași dimensiune.

În plus, deoarece „am folosit \ifblank, care este furnizat de pachetul etoolbox, pentru a verifica dacă a fost furnizat parametrul opțional, Am folosit \robustify pentru a face comanda robustă. Acest lucru a ocolit dezavantajul utilizării \DeclearRobustCommand, menționat de @Stefan într-un comentariu al răspunsului său. Astfel, \protact nu mai este necesar.


Cod:

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

Rezultat:

Comentarii

  • știți opțiunea minimum size pentru noduri?
  • @percusse Ne pare rău, dar ‘ nu te înțeleg.
  • Puteți defini o dimensiune minimă pentru nodurile cercului fără o casetă sau fantomă cu dimensiuni uniforme.
  • @percusse Aceasta ‘ este o sugestie bună totuși, nu ‘ cred că înțelegeți ideea din postarea mea. Am proiectat acest parametru opțional pentru a uniformiza dimensiunea cercurilor, deoarece cercurile de dimensiuni diferite, care sunt aliniate împreună, vor da un aspect neprietenos.

Răspuns

Și mai ușor:

\textcircled{\small{2}} 

sau

{\large \textcircled{\small 2}} 

sau

{\Large \textcircled{\normalsize 2}} 

[ed. Segleți, oferind MWE & imagine]

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

Redarea LaTeX a fișierului .tex de mai sus

Comentarii

  • Acest ar putea funcționa atunci când cercul nu este înconjurat de text, iar dimensiunea fontului numărului nu este o problemă – dar ‘ aș folosi mai degrabă una dintre celelalte soluții în schimb.
  • Putem inversa culorile din interiorul cercului?

Răspunde

răspunsul a fost convertit într-un pachet pe CTAN: https://ctan.org/pkg/circledsteps

Răspunsurile aici sunt toate frumos și mai ales cel tikz este foarte configurabil. Dar are o problemă: nu o puteți folosi în alte tikzpicture s în siguranță. Așa că am îmbinat câteva lucruri și am implementat acest lucru:

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

Exemplu de utilizare

Comentarii

  • Arată grozav! (+1)

Răspunde

cu comenzile imagine implicite:

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

text alternativ

Răspuns

Cu Câmpie (a dat peste asta întâmplător și amintit această întrebare):

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

circlednums

Cu XeTeX:

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

Sau poate cu 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 =” Găzduit de imgur.com „/>

Darn, Stefan m-a bătut la asta cu unul mai frumos.

Răspuns

Iată o soluție \pdfliteral. Funcționează numai pentru numere unice.

\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 

introduceți descrierea imaginii aici

Comentarii

  • De ce transformările coordonatelor?
  • @percusse De fapt, tocmai am copiat codul de la aici și l-am modificat puțin. Dacă puteți oferi resurse pentru a afla mai multe despre codificarea PDF, aș fi foarte fericit.
  • Este de fapt PostScript, dar PDF acceptă și multe obiecte grafice. Deci, ‘ este puțin greoi să înțelegem setul tuturor operatorilor acceptați în PDF. Dar cel puțin pentru a începe să citiți acest cod, puteți utiliza ghidul de referință adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/… . De asemenea, în specificațiile ISO (tabelul 59 din adobe.com/devnet/pdf/pdf_reference.html ) puteți recunoaște operatorii TikZ mapați la frontend;). Problema inițială de înțeles este configurarea casetei de delimitare, restul este notația obișnuită PS.

Răspuns

Utilizarea pachetul pifont și simbolurile de la \ding{172} la \ding{211} aveți cu ușurință numere de cerc foarte excelente, dar dacă doriți să fie încercuite numerele mai mari de 10 avem o problemă. După cum au arătat alți utilizatori stackexchange aici, putem rezolva problema dacă numerele nu sunt prea mari, dar lucrurile au devenit dificile (coduri complexe LaTeX) și putem avea probleme dacă scriem în interiorul unui text (dacă cercul a devenit mare, LaTeX poate să fie forțat să mărească spațiul între linii sau poate să suprapună cercul pe liniile superioare și inferioare adiacente): lucrurile sunt un pic mai simple dacă vrem doar numărul încercuit într-o listă de detalii Această lipsă de flexibilitate ar putea fi, în unele cazuri, deranjantă. O soluție rezonabilă pare să folosească pachetul tcolorbox : după încercări, am constatat că trebuie pur și simplu să adăugăm în preambul acest

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

și apelați în document comanda \ ciao când dorim un număr „încercuit” (exemplu: \ ciao {12} va „înconjura” numărul 12). Apropo, utilizarea fbox în linia preambulului este importantă, deoarece fără ea, cutia rotunjită ar putea ieși din linia din stânga sau din dreapta atunci când acestea se află la marginea liniei: acest lucru ar fi foarte inestetic.

Reluând, văd în această soluție 3 argumente pro și 1 dezavantaje:

  • profesioniști : cod simplu, funcționare bună și într-un text, flexibilitate (și numere mari & în cazul în care ne putem juca cu ușurință cu margini sau culori: vezi 0,5pt sau negru & alb în linia preambulului).
  • contra : nu avem cercuri, ci cutie rotunjită, dar consider că acesta este un compromis rezonabil.

Un exemplu de aplicare a acestei metode este

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. 

care oferă

introduceți descrierea imaginii aici

vă rugăm să rețineți că numerele nu depășesc și că spațiul dintre linii este întotdeauna același: indiferent dacă avem un număr sau nu. Pe scurt, aceste numere aproape înconjurate funcționează foarte bine chiar dacă se află într-un text.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *