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:
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
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}
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}
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:
-
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 .
-
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.
-
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, mentikz
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. -
pict2e
/picture
lösningSen tillägg av Herbert föreslår använder några grundläggande primitiver från paketen
picture
ochpict2e
. 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.
-
Den andra obligatoriska
tikz
-lösningMatthew 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
ochding
Ö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
tillinner 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å tillpifont
. 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}
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}
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}
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}
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 atttextcomp
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}
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}
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}
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
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
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
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.
\textcircled
?