God måte å lage \ textcircled tall på?

Dette spørsmålet førte til en ny pakke:
circledsteps

Jeg prøver å lage noen flotte tall i en sirkel ved hjelp av den enkle kommandoen:

\textcircled{1} 

Sirkelen er imidlertid feiljustert vertikalt med tallet, og ser litt slurvete ut:

alt-tekst

Eventuelle forslag til hvordan kan Jeg justerer den vertikale justeringen slik at tallene ser mer sentrert ut til kretsene? Eller hvis det ikke er et alternativ, hvilke andre måter å oppnå de samme resultatene er mulig?

Jeg vil bare bruke disse for tall og veldig få steder, så manuell justering per tegn er et alternativ.

Jeg bruker pdfLaTeX med Computer Modern, hvis det betyr noe.

Kommentarer

  • Fikk to gode svar her, i mindre enn 30 minutter ter (dere er raske!). Jeg ‘ Jeg vil sannsynligvis lage et community-wiki-svar som oppsummerer alle alternativene en av disse dagene, kanskje noen andre løsninger vil komme i mellomtiden.
  • I ‘ m søvnberøvet, at ‘ hvorfor!
  • Hvilken pakke gir \textcircled?
  • @Matthew: Det ser ut til å være innebygd med LaTeX. Fungerer ut av esken.
  • Du kan bruke Unicode. U + 2460-2473 for 1 til 20, U + 24EA for 0, U + 3251-325F for 21-35, og U + 32B1-32BF for 36-50.

Svar

Her «er en TikZ-løsning:

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

alt text

Det er bare en node. TikZ-alternativene brukes til å justere grunnlinjen, justere størrelsen og få sirkelformen. Du kan velge flere alternativer angående størrelse eller sirkeltykkelse (alternativ thick). Det er mer: for eksempel kan du til og med navngi nodene ved et annet argument for å koble dem med pilene senere.

Hvis man for eksempel vil bruke den til en oppført liste, er det lett, men må beskyttes:

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

alt-tekst

Kommentarer

  • Søt eksempel! Jeg har hatt problemer tidligere med å bruke TikZ-eksempler innebygd, men nå ser jeg det løses av baseline=(char.base). Kult.
  • @Stefan: kanskje du bør erstatte \newcommand av \DeclareRobustCommand, slik at \protect ikke trengs lenger, noe som er mer brukervennlig.
  • Så bør man bruke \ newcommand til å erklære en tom kommandonev og deretter bruke \ DeclareRobustCommand. På den måten vil en eksisterende kommando utstede en feil.
  • @LuisFelipeVillavicencioLopez Visst! Kommentarer er ikke det beste for kodediskusjoner. Kanskje legg ut et nytt spørsmål, eller la ‘ s snakke på LaTeX Community der jeg legger ut daglig.
  • Dette er fint, men problemet er at det kan ‘ ikke brukes inne i en \tikzpicture — som, for for eksempel en nodetekst eller en etikett. Er det noen løsning for et » universal » fine sirkelnumre? For referanse, se tex.stackexchange.com/questions/496348/…

Svar

Jeg ble hyggelig overrasket over hvor mange som bestemte seg for å prøve, og mange interessante løsninger dukket opp. I følge tradisjonen vil dette svaret være community-wiki og vil oppsummere og sammenligne alle foreslåtte løsninger.


Jeg foreslår herved tre forskjellige evalueringskriterier, hver rangert fra 1 til 5:

  • Enkelhet . Dette er et mål på hvor enkelt det er å bruke den foreslåtte løsningen. Poeng trukket for bruk av tilleggspakker, eller definering av annet enn en enkel makro.
  • Fleksibilitet . Dette inkluderer primært hvor enkelt det er å bruke dette i andre sammenhenger, i dette tilfellet forskjellige rammeformer, størrelser og tykkelser.
  • Nøyaktighet . Enkelt sagt, hvor estetisk tiltalende løsningen ser ut, spesielt hvor godt sifferet er sentrert i sirkelen, og hvordan det passer rundt frittgående tekst.

Her går vi:

  1. raisebox -løsningen.

    Takk til Jimi Oke for de raske fingrene. Dette kom først inn, og er den jeg liker spesielt godt for applikasjonen jeg hadde i tankene. Det kommer like enkelt som:

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

    Ikke noe mer enn det. På enkelhetsfronten blir det ikke bedre enn dette.Solid 5/5 , da det ikke er behov for ekstra pakker, og den uhåndterlige definisjonen kan trekkes abstrakt ut i en en-linje \def.

    Fleksibelt sett vurderer denne løsningen ganske lavt, siden du ikke har kontroll over sirkelstørrelsen eller parametrene (jeg er sikker på at noen TeX-hackere bevis meg feil, men for kjærligheten til $ DEITY , spar oss slike vederstyggeligheter). 2/5 er velfortjent her. {1}

    Nøyaktighetsproblemet er subjektivt som alltid, men du trenger å leke med de vertikale avstandene for å få det Just Right ™ for skriftet du har valgt. 2/5 .

  2. ding -y løsning.

    Dette kom inn fra TH. som antyder å bruke noen forhåndsdefinerte symboltegn. De allvitende symbolene-a4-dokumentet sier at Den ene sanne måten å gjøre det på er å bruke:

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

    Eller til og med Go-nomenklaturen:

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

    På enkelhetssiden priser dette på 4.5 / 5 , selv om jeg er motvillig til å gi den en kort 5 på grunn av de ekstra pakkene som er involvert.

    Dette er ikke fleksibelt i det hele tatt. Hvis du ikke liker tegnene, er du alene. 1/5 .

    Selve tegnene er godt utformede, som man kan forvente, og tallene er visuelt godt justert med sirklene. Selv om du har et skrift med en tydelig stil, kan det hende at tallfonten ikke passer godt sammen med teksten.

  3. Den obligatoriske tikz løsning.

    Ahh, det er alltid det, er ikke det. Dette skyldes 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} 

    Personlig er jeg ikke interessert i tikz (jeg vet , Jeg burde lære det en av disse dagene), så å gå med dette ville være en engangsbruk av pakken for meg, som jeg gjerne vil unngå. Jeg kan ikke gi mer enn 2/5 her, men tikz fanboiz (og galz!) burde støte dette helt opp til 4/5 .

    Som når det gjelder fleksibilitet: dette er den virkelige avtalen. Stefan demonstrerte til og med hvordan man bruker de innringte symbolene med opplistede lister, av alle ting. Ulike rammeformer er absolutt mulig, med varierende grad av passform rundt glyf. Utiskutabel «6ad8cc7ee0»>

5/5 .

Baseline alignment er førsteklasses uten å leke med noen manuelle justeringer, noe som er ganske hyggelig. Avstanden rundt symbolet ser bra ut, selv om sirkelen i fri løp helst bør ha en strammere passform rundt tallet, noe som kan oppnås ved å leke med inner sep -parameteren i kommandodefinisjonen. 5/5 her.

  • pict2e / picture løsning

    Et sent tillegg av Herbert foreslår bruker noen grunnleggende primitiver fra picture og pict2e pakkene. Her går:

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

    På enkelhetsfronten rangerer dette ikke for godt. Det ser litt kronglete ut, men definitivt forståelig etter å ha studert det, og bruker to ekstra pakker. 2/5 er en rimelig poengsum her.

    Fleksibilitet er ikke helt innebygd i, men er absolutt mulig. Sirkelradiusen kan justeres, ved å endre 1.5 -faktoren, og basislinjjusteringen kan spilles med. 3.5 / 5 .

    Slik det står i denne definisjonen, er grunnlinjen for den omkringliggende teksten tangent til sirkelen i stedet for å bli justert med den sirklede tallbase. Dette kan være ønskelig under noen omstendigheter, men tallene ser litt ut av sted på denne måten. Bedre resultater oppnås med noen ekstra beregninger når du legger boksene, og en 3.5 / 5 er gitt her til refleksjon t dette potensialet.

  • Den andre obligatoriske tikz løsningen

    Matthew Leingang og morbusg prøvde seg i dette, og selv om deres innsats absolutt blir verdsatt, føler jeg Stefans løsning er enklere. Jeg er takknemlig for innsatsen (og ydmykheten din), og jeg oppstemte begge svarene dine.

  • Sluttresultat:

    • Enkelhet : raisebox
    • Fleksibilitet : tikz
    • Nøyaktighet : knyttet mellom tikz og ding

    Samlet: tikz, uten å nøle ( akklamasjoner fra publikum, hatter kastet, lommetørkle vinket og alt det).

    Til slutt, noen testkoder:

    \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} Hvis noen bestemmer seg for å skrive noe slikt, gi meg beskjed, så vil jeg ta det med i dette svaret uten ekstra kostnad, men vær oppmerksom på at innlegget senere blir merket \textcircled{18+} for å beskytte de svake i hjertet.

    Kommentarer

    • utmerket sammendrag, bra gjort! Innlegg som dette gjør dette nettstedet verdt.
    • @Yiannis Det ‘ Det har gått litt tid siden jeg la ut spørsmålet, men jeg fant bare tid akkurat nå til å polere sammendraget. Jeg håper det vil være til nytte for mennesker med samme problem.
    • Du sier, » Avstanden rundt symbolet ser bra ut, men i friløp tekst sirkelen bør helst ha en strammere passform rundt tallet. » Dette løses enkelt ved å endre inner sep=2pt til inner sep=1pt i \circled kommandodefinisjon.
    • @Matt: Visst – min intensjon her var å påpeke et estetisk problem, men jeg antar Jeg var ikke ‘ t helt klar over det. Informasjonen om hva som må endres er nå nevnt i innlegget. Takk.
    • @MartinTapankov Problemet er løst med raisebox forutsatt at alle samtaler foregår med \ protect.

    Svar

    Den raskeste løsningen ville være å bruke kommandoen \raisebox. Jeg har lekt litt med det, og det virker som om du senker teksten med 0.9pt, setter figuren omtrent i sentrum:

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

    Du kan leke deg rundt med det for å få det absolutte sentrum, men det er definitivt mellom 0,9 og 1pt. Jeg fikk ideen her . Det ser ut til at \textcircled -kommandoen fungerer best for tekst! Men uansett, dette burde løse problemet ditt.

    Kommentarer

    • At ‘ kommer til å endres grunnlinjen til tallene som kanskje ikke er ønskelig. Men kanskje med et ytre \raisebox for å heve hele det sirklede tallet, kunne grunnlinjene opprettholdes.
    • Mais oui! Jeg burde ha tenkt på dette selv. Takk! Jeg ‘ Vent litt på noen flere forslag, før jeg merker dette som akseptert.
    • @TH. Det er sant, men det betyr ikke noe ‘ for meg – tallene vises ikke i den frittgående teksten, men er heller overskrifter for tabellkolonner eller brukes til merking.
    • Men faktisk har \textcircled -utgangen allerede en lavere grunnlinje med eller uten \raisebox. Så hvis forfatteren foretrekker det hele, bør han gå for pifont. Med en ytre \raisebox, er maksimumet en 0.5pt høyning, som får sirkelen tilbake til sin opprinnelige posisjon, men som ikke stemmer overens med teksten. Å heve alt utover 0.5pt begynner å skifte tallet, ikke sirkelen, og negere den første innsatsen. Dermed, hvis forfatteren ønsker en god \textcircled, så her ‘ er en: \raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {8}} } . Dette er faktisk ganske bra.
    • @Martin: du kan også få et TikZ-forslag. 😉

    Svar

    morbusg allerede nevnt at noen skrifter har omringet tall som Unicode-tegn og viste hvordan de kan legges inn direkte. Noen skrifter gir et mer brukervennlig grensesnitt for tilgang til tallene, f.eks. Linux Libertine og Junicode. Dette betyr tydeligvis at vi avviker fra kravet ditt om å bruke Computer Modern. Fordelen med disse Unicode-numrene er antagelig at de ble laget av en fontdesigner, så det burde ikke være noe behov for finjustering.

    Her er et enkelt proof-of-concept (du må også ha junicode -pakken installert):

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

    utdata

    Disse metodene er beskrevet i de respektive dokumentasjonene.

    Her er en enda mer behagelig måte å få tilgang til disse settene med tall. De dobbelt sirklede tallene er (per Unicode) tilgjengelige fra 1 til 10, de andre fra 0 til 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} 

    utdata

    Kommentarer

    • Jeg tror dette ikke fungerer med pdflatex.
    • @moose Ja .. Jeg må sjekke om den første kodebiten fungerer med gjeldende libertine i det hele tatt (men da skal pdfLaTeX være bra), den andre biten er bare XeLaTeX / LuaLaTeX, jeg burde også legge det i svaret.

    Svar

    PGF er for mye for denne applikasjonen, men hvis du allerede har den lastet inn, kan du bruke den:

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

    utdrag fra utdrag

    Som du kan se, er det litt ekstra plass rundt kretsene sammenlignet med \textcircled men det er ikke dårlig.

    redigering før innlegg: Jeg ser at Stefan og morbusg har slått meg. Nåvel.

    Kommentarer

    • Jeg tror en ekstern prosess faktisk er overdreven for noe som kan gjøres inne i LaTeX. Du kan like enkelt lage den som \ newcommand {\ Ring} [1] {\ raisebox {-1pt} {\ begin {tabular} {@ {} c @ {}} {\ small # 1} \ [ -11.5pt] \ BigCircle \ end {tabular}}}. Autojustering av dimensjonene blir igjen som en øvelse til leseren 🙂
    • Peter, hvilken ekstern prosess?
    • @ u0b34a0f6ae: Jeg tror Peter viser til det faktum at tikz bruker en haug med \special kommandoer lagt til etter at TeX har behandlet inngangen. Så det ‘ er «eksternt» til det normale TeX-fordøyelsessystemet.

    Svar

    Fra symbols.pdf ser det ut til at pifont kan gjøre hva du vil med \ding{172} til \ding{181} eller \ding{192} til \ding{201}.

    Eller igo pakke med \whitestone{1} til \whitestone{99}, selv om det er ment for å sette Go-kort.

    Det høres ut som om løsningen er funnet, men her er det en enkel sammenligning.

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

    skriv inn bildebeskrivelse her

    Kommentarer

    • Dette er en flott løsning. Pifontene er imidlertid ganske klemt, sammenlignet med \textcircled -utgangen. Fordelen er imidlertid at pifonter er i tråd med teksten, noe som kan være en god ting for forfatteren.
    • @TH: Fin. Hva gjør textcomp-pakken?
    • @Jimi: Jeg trodde det var nødvendig for \textcircled. Jeg var feil. (Jeg så på tabell 17 i Symbols.pdf og den bemerker at textcomp kreves for \newtie, men jeg var ikke ‘ t leser nøye nok.) Jeg ‘ har oppdatert koden.
    • @PatrickT Takk for bildet. Det ‘ er et godt tillegg.

    Svar

    mathdesign pakke definerer \figurecircled som har bedre avstand for tall enn \textcircled gjør.

    Matematikkdesignpakken er inkompatibel med amsfonts og amssymb men hvis du bruker en matematisk design-font uansett, er det ikke noe problem.

    Kommentarer

    • Dette svaret ble nedstemt? Kunne den som gjorde dette forklare hvorfor de synes dette er en dårlig løsning på problemet?
    • Jeg ‘ t nedstemte deg, men jeg fikk en feil med et enkelt testfil. Kan du tilby en MWE? Min feilmelding: ! 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!

    Svar

    @Stefan » Svaret er bra, men jeg forbedret svaret hans.

    For det første hvis \circled{1} og \circled{10} er plassert sammen vil de to kretsene ikke ha samme størrelse, så jeg la til en valgfri parameter i \circled -kommandoen. Den valgfrie parameteren ble omregistrert som en plassholder for å sikre at disse kretsene vises samme størrelse.

    I tillegg, siden jeg brukte \ifblank, som er levert av pakken etoolbox, for å sjekke om den valgfrie parameteren ble gitt, Jeg brukte \robustify for å gjøre kommandoen robust. Dette forbigikk ulempen ved å bruke \DeclearRobustCommand, nevnt av @Stefan i en kommentar til svaret. Dermed er \protact ikke lenger nødvendig.


    Kode:

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

    Resultat:

    Kommentarer

    • du kjenner alternativet minimum size for noder?
    • @percusse Beklager, men Jeg forstår deg ikke ‘.
    • Du kan definere en minimumsstørrelse for sirkelnoder uten en rute eller fantom med ensartet størrelse.
    • @percusse At ‘ er et godt forslag Jeg tror imidlertid ikke ‘ du forstår ideen i innlegget mitt. Jeg designet denne valgfrie parameteren for å uniformere størrelsen på sirklene, siden sirkler med forskjellige størrelser som er justert sammen, vil gi et uvennlig utseende.

    Svar

    Enda enklere:

    \textcircled{\small{2}} 

    eller

    {\large \textcircled{\small 2}} 

    eller

    {\Large \textcircled{\normalsize 2}} 

    [red. Segletes, som gir MWE & image]

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

    LaTeX-gjengivelse av ovennevnte .tex-fil

    Kommentarer

    • Denne kan fungere når sirkelen ikke er omgitt av tekst, og skriftstørrelsen på nummeret ikke er et problem – men jeg ‘ vil heller bruke en av de andre løsningene i stedet.
    • Kan vi vende om fargene i sirkelen?

    Svar

    dette svaret er konvertert i en pakke på CTAN: https://ctan.org/pkg/circledsteps

    Svarene her er alle hyggelig, og spesielt tikz er veldig konfigurerbar. Men det har et problem: du kan ikke bruke den i andre tikzpicture på en sikker måte. Så jeg slo sammen et par ting og implementerte dette:

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

    Eksempel på bruk

    Kommentarer

    • Ser bra ut! (+1)

    Svar

    med standard bildekommandoer:

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

    alt tekst

    Svar

    Med vanlig (snublet over dette ved en tilfeldighet og husket dette spørsmålet):

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

    ringte numre

    Med XeTeX:

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

    Eller kanskje med 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 =» Vert av imgur.com «/>

    Darn, Stefan slo meg til det med en finere.

    Svar

    Her er en \pdfliteral løsning. Det fungerer bare for enkeltnumre.

    \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 

    skriv inn bildebeskrivelse her

    Kommentarer

    • Hvorfor koordinatransformasjonene?
    • @percusse Egentlig kopierte jeg bare koden fra her og endret den litt. Hvis du kan gi noen ressurser for å lære mer om PDF-koding, vil jeg være veldig glad.
    • Det er faktisk PostScript, men PDF støtter også mange grafikkobjekter. Så det er ‘ litt tungvint å forstå settet med alle operatører som støttes i PDF. Men i det minste for å begynne å lese denne koden kan du bruke referanseguiden adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/… . Også i ISO-spesifikasjonen (tabell 59 i adobe.com/devnet/pdf/pdf_reference.html ) kan du gjenkjenne TikZ-operatørene som er kartlagt til frontend;). Det første problemet å forstå er å sette opp avgrensningsboksen, resten er vanlig PS-notasjon.

    Svar

    Bruk pifont pakke og symboler fra \ding{172} til \ding{211} har du lett veldig gode sirkelnumre, men hvis du vil sirkle tall større enn 10 har vi et problem. Som vist av andre stackexchange-brukere her, kan vi løse problemet hvis tallene ikke er for store, men ting ble vanskelig (komplekse LaTeX-koder), og vi kan få problemer hvis vi skriver i en tekst (hvis sirkelen ble stor, kan LaTeX bli tvunget til å forstørre mellomrommet mellom linjene, eller kanskje å overlappe sirkelen ved tilstøtende øvre og nedre linjer): ting er litt enklere hvis vi bare vil ha sirklet nummer i en liste over detaljer. Denne mangelen på fleksibilitet kan i noen tilfeller være plagsom. En rimelig løsning ser ut til å bruke pakken tcolorbox : etter forsøk fant jeg ut at vi bare må legge inn denne innledningen

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

    og ring inn dokumentet kommandoen \ ciao når vi vil ha et «sirklet» nummer (eksempel: \ ciao {12} vil «sirkle» tallet 12). Forresten, bruk av fbox i innledningen er viktig fordi uten den kan avrundet boks stikke ut av linjen til venstre eller til høyre når de er på linjekanten: dette ville være veldig uestetisk.

    Fortsett, jeg ser i denne løsningen 3 fordeler og 1 ulemper:

    • proffer : enkel kode, godt å jobbe inne i en tekst også, fleksibilitet (store tall også & i tilfelle vi enkelt kan spille med rammer eller farger: se 0.5pt eller svart & hvit i innledningen).
    • ulemper : vi har ikke sirkler, men avrundet boks, men jeg synes dette er et rimelig kompromiss.

    Et eksempel på anvendelse av denne metoden er

    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. 

    som gir

    skriv inn bildebeskrivelse her

    Vær oppmerksom på at tall ikke stikker ut, og at mellomrommet mellom linjene alltid er det samme: uansett om vi har et tall eller ikke. Kort sagt, disse nesten sirklede tallene fungerer veldig bra selv om de er inne i en tekst.

    Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *