Bra sätt att skapa \ textcirklade nummer?

Denna fråga ledde till ett nytt paket:
circledsteps

Jag försöker göra några snygga siffror i en cirkel med det enkla kommandot:

\textcircled{1} 

Cirkeln är dock feljusterad vertikalt med siffran och ser lite slarvig ut:

alt text

Eventuella förslag hur kan Jag justerar den vertikala inriktningen så att siffrorna ser mer centrerade ut mot cirklarna? Eller, om det inte är ett alternativ, vilka andra sätt att uppnå samma resultat är möjliga?

Jag använder bara dessa för siffror och på väldigt få ställen, så manuell justering per tecken är ett alternativ.

Jag använder pdfLaTeX med Computer Modern, om det betyder något.

Kommentarer

  • Fick två bra svar här, i mindre än 30 minuter utes (ni är snabba!). Jag ’ Kommer antagligen att göra ett community-wiksvar som sammanfattar alla alternativ en av dessa dagar, kanske några andra lösningar kommer under tiden.
  • I ’ m sömnberövad, att ’ varför!
  • Vilket paket ger \textcircled?
  • @Matthew: Det verkar vara inbyggt med LaTeX. Fungerar ur lådan.
  • Du kan använda Unicode. U + 2460-2473 för 1 till 20, U + 24EA för 0, U + 3251-325F för 21-35 och U + 32B1-32BF för 36-50.

Svar

Här ”är 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 är bara en nod. TikZ-alternativ används för att justera baslinjen, för att justera storleken och för att få cirkelformen. Du kan välja fler alternativ angående storlek eller cirkeltjocklek (alternativ thick). Det finns mer: till exempel kan du till och med namnge noderna med ett annat argument för att ansluta dem med pilar senare.

Om man till exempel vill använda den för en uppräknad lista är det lätt men måste skyddas:

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

alt text

Kommentarer

  • Söta exempel! Jag har haft problem tidigare med TikZ-exempel inline men nu ser jag att det löses av baseline=(char.base). Cool.
  • @Stefan: kanske du bör ersätta \newcommand av \DeclareRobustCommand, som att \protect inte behövs längre, vilket är mer användarvänligt.
  • Då ska man använda \ newcommand för att deklarera en tom kommandofist och sedan använda \ DeclareRobustCommand. På det sättet kommer ett befintligt kommando att ge ett fel.
  • @LuisFelipeVillavicencioLopez Visst! Kommentarer är inte det bästa för koddiskussioner. Skicka kanske en ny fråga eller låt ’ s prata på LaTeX Community där jag lägger upp varje dag.
  • Det här är trevligt, men problemet är att det kan ’ t användas i en \tikzpicture — som, för till exempel en nodtext eller en etikett. Finns det någon lösning för ett ” universal ” fina inringade nummer? För referens, se tex.stackexchange.com/questions/496348/…

Svar

Jag blev positivt överraskad över hur många som bestämde sig för att prova, och många intressanta lösningar dök upp. Enligt tradition kommer detta svar att vara community-wiki och kommer att sammanfatta och jämföra alla föreslagna lösningar.


Jag föreslår härmed tre olika utvärderingskriterier, var och en betygsatt från 1 till 5:

  • Enkelhet . Detta är ett mått på hur lätt det är att använda den föreslagna lösningen. Poäng som dras av för att använda ytterligare paket eller för att definiera något annat än ett enkelt bekvämlighetsmakro.
  • Flexibilitet . Detta inkluderar främst hur lätt det är att använda detta i andra sammanhang, i detta fall olika ramformer, storlekar och tjocklekar.
  • Noggrannhet . Enkelt uttryckt, hur estetiskt tilltalande lösningen ser ut, särskilt hur väl glyffen är centrerad i cirkeln, och hur den passar den omgivande frittgående texten.

Nu går vi:

  1. raisebox -lösningen.

    Tack till Jimi Oke för de snabba fingrarna. Detta kom först och är det som jag gillar särskilt för den applikation jag tänkte på. Det kommer lika enkelt som:

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

    Inget mer än så. På enkelhetsfronten blir det inte bättre än detta.Fast 5/5 , eftersom inga extra paket behövs, och den otrevliga definitionen kan trivialt abstraheras i en enfodrad \def.

    Flexibilt sett är denna lösning ganska låg, eftersom du inte har någon kontroll över cirkelstorleken eller parametrarna (jag är säker på att vissa TeX-hackare skulle bevisa mig fel, men för kärleken till $ DEITY , spara oss sådana styggelser). 2/5 är välförtjänt här. {1}

    Noggrannhetsfrågan är subjektiv som alltid, men du måste leka med de vertikala avstånden för att få det precis rätt ™ för typsnittet du har valt. 2/5 .

  2. ding -y-lösning.

    Detta kom från TH. som föreslår att du använder några fördefinierade symboltecken. De allvetande symbolerna-a4-dokumentet säger att The One True Way to do it är att använda:

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

    Eller till och med Go-kortets nomenklatur:

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

    På enkelhetssidan är detta 4,5 / 5 , även om jag är ovillig att ge det en rak 5 på grund av de extra paketen som är inblandade.

    Det här är inte alls flexibelt. Om du inte gillar tecknen är du själv. 1/5 .

    Själva tecknen är väl utformade, som man kan förvänta sig, och siffrorna är visuellt väl anpassad till cirklarna. Även om du har en typsnitt med en tydlig stil, kan siffrorna inte passa in i texten.

  3. Det obligatoriska tikz -lösning.

    Ahh, det är alltid det, är det inte. Detta beror på 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} 

    Personligen är jag inte med i tikz (jag vet , Jag borde lära mig det en av dessa dagar), så att gå med detta skulle vara en engångsanvändning av paketet för mig, som jag skulle vilja undvika. Jag kan inte ge mer än 2/5 här, men tikz fanboiz (och galz!) borde stöta på det hela vägen till 4/5 .

    Som vad beträffar flexibilitet: detta är den verkliga affären. Stefan visade till och med hur man använder de inringade symbolerna med uppräknade listor, av alla saker. Olika ramformer är verkligen möjliga, med varierande grad av passform runt tecknet. Utan tvekan 5/5 .

    Baslinjejustering är toppklass utan att leka med några manuella justeringar, vilket är ganska trevligt. Avståndet runt symbolen ser bra ut, även om cirkeln i frilöpande text helst bör ha en snävare passning runt siffran, vilket kan uppnås genom att leka med parametern inner sep i kommandodefinitionen. 5/5 här.

  4. pict2e / picture lösning

    Sen tillägg av Herbert föreslår använder några grundläggande primitiver från paketen picture och pict2e. Här 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å enkelhetsgraden går det inte för bra. Det ser lite krångligt ut, men definitivt förståeligt efter att ha studerat det och använder ytterligare två paket. 2/5 är en rimlig poäng här.

    Flexibilitet är inte helt inbyggd in, men är verkligen möjligt. Cirkelradien kan justeras genom att ändra 1.5 -faktorn, och baslinjejusteringen kan spelas med. 3.5 / 5 .

    Som det står i denna definition är baslinjen för den omgivande texten tangent till cirkeln istället för att vara i linje med den inringade nummerbas. Detta kan vara önskvärt under vissa omständigheter, men siffrorna ser lite felaktiga ut på det här sättet. Bättre resultat kan uppnås med några ytterligare beräkningar när rutorna placeras och en 3.5 / 5 ges här för att reflektera t denna potential.

  5. Den andra obligatoriska tikz -lösning

    Matthew Leingang och morbusg försökte sig i detta, och även om deras ansträngningar verkligen uppskattas, känner jag Stefans lösning är enklare. Jag är tacksam för ansträngningen (och din ödmjukhet) och jag röstade upp båda dina svar.

Slutresultat:

  • Enkelhet : raisebox
  • Flexibilitet : tikz
  • Noggrannhet : bunden mellan tikz och ding

Övergripande: tikz, utan tvekan ( acklamation från allmänheten, kastade hattar, näsdukar viftade och allt detta).

Slutligen en testkod:

\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} Om någon bestämmer sig för att skriva en sådan sak, låt mig veta så tar jag det med i det här svaret utan extra kostnad, men meddelas att inlägget därefter kommer att markeras \textcircled{18+} för att skydda svaga hjärtan.

Kommentarer

  • utmärkt sammanfattning, bra gjort! Inlägg som detta gör den här webbplatsen värt besväret.
  • @Yiannis Det ’ har gått lite tid sedan jag lade upp frågan, men jag hittade bara tid just nu för att polera sammanfattningen. Jag hoppas att det kommer att vara till nytta för människor med samma problem.
  • Du säger, ” Avståndet runt symbolen ser bra ut, även om det är frikörande text ska cirkeln helst ha en snävare passning runt numret. ” Detta fixas enkelt genom att ändra inner sep=2pt till inner sep=1pt i \circled kommandot definition.
  • @Matt: Visst – min avsikt här var att påpeka en estetisk fråga, men jag antar Jag var inte ’ inte helt klar över det. Informationen om vad som behöver ändras nämns nu i inlägget. Tack.
  • @MartinTapankov Problemet löses med raisebox förutsatt att varje samtal föregås av \ protect.

Svar

Den snabbaste lösningen är att använda kommandot \raisebox. Jag har spelat lite med det, och det verkar att sänka texten med 0.9pt sätter siffran ungefär i mitten:

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

Du kan spela runt med det för att få det absoluta centrumet men det är definitivt mellan 0,9 och 1pt. Jag fick idén här . Det verkar som att kommandot \textcircled fungerar bäst för text! Men hur som helst, detta borde lösa ditt problem.

Kommentarer

  • Det ’ kommer att ändras baslinjen för de siffror som kanske inte är önskvärda. Men kanske med ett yttre \raisebox för att höja hela det inringade numret kunde baslinjer upprätthållas.
  • Mais oui! Jag borde ha tänkt på detta själv. Tack! Jag ’ Jag väntar lite på några fler förslag innan jag markerar detta som godkänt.
  • @TH. Det är sant, men det betyder inte ’ för mig – siffrorna visas inte i den frittgående texten utan är rubriker för tabellkolumner eller används för märkning.
  • Men faktiskt har \textcircled -utgången redan en lägre baslinje med eller utan \raisebox. Så om författaren föredrar att allt flushar, ska han gå till pifont. Med en yttre \raisebox är det maximala en 0,5pt höjning, vilket får cirkeln tillbaka till sin ursprungliga position, vilket dock inte är i linje med texten. Att höja allt utöver 0,5pt börjar flytta numret, inte cirkeln, vilket förnekar de första ansträngningarna. Om författaren vill ha en bra \textcircled, så här ’ s: \raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {8}} } . Det här är faktiskt ganska bra.
  • @Martin: du kanske också får ett TikZ-förslag. 😉

Svar

morbusg redan nämnt att vissa teckensnitt har omringat siffror som Unicode-tecken och visat hur man bäddar in dem direkt. Vissa teckensnitt ger ett mer användarvänligt gränssnitt för åtkomst till siffrorna, t.ex. Linux Libertine och Junicode. Det betyder självklart att vi avviker från ditt krav på att använda Computer Modern. Fördelen med dessa Unicode-nummer är förmodligen att de skapades av en fontdesigner, så det borde inte vara något behov av finjustering.

Här är ett enkelt proof-of-concept (du måste också ha junicode -paketet installerat):

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

output

Dessa metoder beskrivs i respektive dokumentation.

Här är ett ännu bekvämare sätt att komma åt dessa siffror. De dubbelt inringade siffrorna är tillgängliga (per Unicode) från 1 till 10, de andra från 0 till 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

  • Jag tror att detta inte fungerar med pdflatex.
  • @moose Ja .. Jag måste kontrollera om den första kodbiten fungerar med den aktuella libertine överhuvudtaget (men då ska pdfLaTeX vara bra), den andra biten är bara XeLaTeX / LuaLaTeX, jag borde också lägga det i svaret.

Svar

PGF är överdrivet för det här programmet, men om du redan har laddat det kan du använda det:

\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 av utdrag

Som du ser finns det lite extra utrymme runt cirklarna jämfört med \textcircled men det är inte dåligt.

redigering före posten: Jag ser att Stefan och morbusg har slagit mig. Nåväl.

Kommentarer

  • Jag tror att en extern process verkligen är överdriven för något som kan göras i LaTeX. Du kan lika enkelt konstruera det som \ newcommand {\ Ring} [1] {\ raisebox {-1pt} {\ begin {tabular} {@ {} c @ {}} {\ small # 1} \ [ -11.5pt] \ BigCircle \ end {tabular}}}. Autojustering av dimensionerna lämnas som en övning för läsaren 🙂
  • Peter, vilken extern process?
  • @ u0b34a0f6ae: Jag tror att Peter hänvisar till det faktum att tikz använder en massa \special kommandon som läggs till efter att TeX har bearbetat ingången. Så det ’ är ”externt” till det normala TeX-matsmältningssystemet.

Svar

Från symbols.pdf ser det ut som att pifont kan göra vad du vill med \ding{172} till \ding{181} eller \ding{192} till \ding{201}.

Eller igo paket med \whitestone{1} till \whitestone{99}, även om det är avsett för att sätta Go-kort.

Det låter som om lösningen har hittats, men här är en enkel jämförelse.

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

ange bildbeskrivning här

Kommentarer

  • Detta är en bra lösning. Emellertid är pifonterna ganska klämda, jämfört med \textcircled -utgången. Proffset är dock att pifonterna är i linje med texten, vilket kan vara bra för författaren.
  • @TH: Trevligt. Vad gör textcomp-paketet?
  • @Jimi: Jag trodde att det krävdes för \textcircled. Jag var felaktig. (Jag tittade på tabell 17 i Symbols.pdf och det noteras att textcomp krävs för \newtie, men jag var inte ’ läser inte noggrant.) Jag ’ har uppdaterat koden.
  • @PatrickT Tack för bilden. Det ’ är ett bra tillägg.

Svar

mathdesign paketet definierar \figurecircled vilket har bättre avstånd för siffror än \textcircled gör.

Matematikdesignpaketet är inte kompatibelt med amsfonts och amssymb men om du ändå använder ett mathdesignteckensnitt är det inte ett problem.

Kommentarer

  • Har du svarat på detta svar? Kunde den som gjorde detta förklara varför de tycker att det här är en dålig lösning på problemet?
  • Jag tappade inte ’ men jag fick ett fel med ett enkelt testfil. Kan du tillhandahålla en MWE? Mitt felmeddelande: ! 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 är bra, men jag förbättrade hans svar.

För det första, om \circled{1} och \circled{10} placeras tillsammans kommer de två cirklarna inte att ha samma storlek, så jag lade till en valfri parameter i kommandot \circled. Den valfria parametern registrerades om som platshållare för att se till att dessa cirklar visas i samma storlek.

Eftersom jag dessutom använde \ifblank, som tillhandahålls av paketet etoolbox, för att kontrollera om den valfria parametern tillhandahölls, Jag använde \robustify för att göra kommandot robust. Detta kringgick nackdelen med att använda \DeclearRobustCommand, som @Stefan nämner i en kommentar till sitt svar. Således behövs inte längre \protact.


Kod:

\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

  • känner du till alternativet minimum size för noder?
  • @percusse Tyvärr, men Jag förstår dig inte ’.
  • Du kan definiera en minsta storlek för cirkelnoder utan en ruta eller fantom med enhetlig storlek.
  • @percusse Det ’ är ett bra förslag Men jag tror inte ’ att du förstår idén i mitt inlägg. Jag utformade den här valfria parametern för att enhetliggöra storleken på cirklarna, eftersom cirklar med olika storlek som är inriktade ihop ger en ovänlig look.

Svar

Ännu enklare:

\textcircled{\small{2}} 

eller

{\large \textcircled{\small 2}} 

eller

{\Large \textcircled{\normalsize 2}} 

[ed. Segletes, tillhandahåller MWE & bild]

\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-rendering av ovanstående .tex-fil

Kommentarer

  • Denna kan fungera när cirkeln inte omges av text och teckenstorleken på numret inte är ett problem – men jag ’ vill hellre använda någon av de andra lösningarna istället.
  • Kan vi invertera färgerna inuti cirkeln?

Svar

detta svaret har konverterats i ett paket på CTAN: https://ctan.org/pkg/circledsteps

Svaren här är alla trevligt, och särskilt tikz är mycket konfigurerbar. Men det har ett problem: du kan inte använda den i andra tikzpicture på ett säkert sätt. Så jag slog ihop ett par saker och implementerade detta:

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

Exempel på användning

Kommentarer

  • Ser bra ut! (+1)

Svara

med standardbildkommandon:

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

Svar

Med vanlig (snubblat på detta av en slump och kom ihåg denna fråga):

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

inringade nummer

Med XeTeX:

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

Eller kanske 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 =” Hosted by imgur.com ”/>

Darn, Stefan slog mig till det med en trevligare.

Svar

Här är en \pdfliteral lösning. Det fungerar bara för enstaka nummer.

\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 

ange bildbeskrivning här

Kommentarer

  • Varför koordinatomvandlingarna?
  • @percusse Egentligen kopierade jag bara koden från här och ändrade den lite. Om du kan ge några resurser för att lära dig mer om PDF-kodning skulle jag vara väldigt glad.
  • Det är faktiskt PostScript men PDF stöder också många grafikobjekt. Så det är ’ lite besvärligt att förstå uppsättningen av alla operatörer som stöds i PDF. Men åtminstone för att börja läsa den här koden kan du använda referensguiden adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/… . Även i ISO-specifikationen (tabell 59 i adobe.com/devnet/pdf/pdf_reference.html ) kan du känna igen de TikZ-operatörer som är mappade till frontend;). Det första problemet att förstå är att ställa in avgränsningsrutan, resten är vanlig PS-notering.

Svar

Med pifont paket och symboler från \ding{172} till \ding{211} du har lätt mycket utmärkta inringade nummer, men om du vill cirkulera siffror större än 10 har vi ett problem. Som visas av andra stackexchange-användare här kan vi lösa problemet om siffrorna inte är för stora, men saker blev svåra (komplexa LaTeX-koder) och vi kan få problem om vi skriver inuti en text (om cirkeln blev stor kan LaTeX tvingas att förstora utrymmet mellan linjer, eller kanske att överlappa cirkel på intilliggande övre och nedre linjer): saker är lite enklare om vi bara vill ha inringat nummer i en lista över objekt. Denna brist på flexibilitet kan i vissa fall vara besvärande. En rimlig lösning verkar använda paketet tcolorbox : efter försök fann jag att vi helt enkelt måste lägga till inledningen

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

och ring i dokumentet kommandot \ ciao när vi vill ha ett ”inringat” nummer (exempel: \ ciao {12} kommer att ”cirkulera” siffran 12). Förresten är användningen av fbox i inledningen linjen viktig, för utan den kan den rundade rutan skjuta ut ur linjen till vänster eller till höger när de är vid linjens marginal: detta skulle vara väldigt oestetiskt.

Återupptas, jag ser i den här lösningen 3 fördelar och 1 nackdelar:

  • proffs : enkel kod, bra arbete inuti en text också, flexibilitet (stora siffror för & om vi enkelt kan spela med kanter eller färger: se 0.5pt eller svart & vit i ingressen).
  • nackdelar : vi har inte cirklar men rundad ruta, men jag tycker att detta är en rimlig kompromiss.

Ett exempel på tillämpning av denna metod är

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 ger

ange bildbeskrivning här

Observera att siffrorna inte sticker ut och att utrymmet mellan raderna alltid är detsamma: oavsett om vi har ett nummer eller inte. Kort sagt, de här nästan inringade siffrorna fungerar mycket bra även om de finns i en text.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *