Tato otázka vedla k novému balíčku:
circledsteps
Snažím se vytvořit pěkná čísla v kruhu pomocí jednoduchého příkazu:
\textcircled{1}
Kruh je však svisle zarovnaný s číslem a vypadá trochu nedbale:
Jakékoli návrhy, jak lze Upravím svislé zarovnání tak, aby čísla vypadala více soustředěná na kruhy? Nebo, pokud to není možné, jaké další způsoby, jak dosáhnout stejných výsledků, jsou možné?
Použiji pouze tyto pro čísla a na velmi málo místech, takže je možné ruční nastavení na glyf.
Používám pdfLaTeX
s Computer Modern, pokud na tom záleží.
Komentáře
Odpověď
Zde je řešení 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}
Je to jen uzel. Možnosti TikZ se používají k zarovnání základní čáry, úpravě velikosti a získání tvaru kruhu. Můžete si svobodně vybrat další možnosti týkající se velikosti nebo tloušťky kruhu (volba thick
). Je toho více: uzly můžete například pojmenovat jiným argumentem a spojit je pomocí šipek později.
Pokud ho chcete použít například pro výčet, je to snadné, ale musíte ho chránit:
\usepackage{enumitem} ... \begin{enumerate}[label=\protect\circled{\arabic*}] \item First item \item Second item \item Third item \item Fourth item \end{enumerate}
Komentáře
- Sladký příklad! V minulosti jsem měl problémy s používáním Vložené příklady TikZ, ale teď vidím, že je to vyřešeno
baseline=(char.base)
. Super. - @Stefan: možná byste měli nahradit
\newcommand
by\DeclareRobustCommand
,\protect
již není potřeba, což je uživatelsky přívětivější. - Pak byste měli použít \ newcommand k prohlášení prázdné pěsti příkazu a poté použít \ DeclareRobustCommand. Tímto způsobem existující příkaz způsobí chybu.
- @LuisFelipeVillavicencioLopez Jistě! Komentáře jsou není to nejlepší pro diskuse o kódu. Možná pošlete novou otázku nebo nechte ‚ s mluvit v komunitě LaTeX , kde zveřejňuji každý den.
- To je hezké, ale problém je, že jej ‚ nelze použít uvnitř
\tikzpicture
— jako, pro například text uzlu nebo štítek. Existuje nějaké řešení pro “ univerzální “ pěkná zakroužkovaná čísla? Informace naleznete v tex.stackexchange.com/questions/496348/…
Odpověď
Byl jsem příjemně překvapen, kolik lidí se rozhodlo to zkusit, a objevilo se mnoho zajímavých řešení. Podle tradice bude touto odpovědí komunitní wiki a bude shrnovat a porovnávat všechna navrhovaná řešení.
Navrhuji tímto tři různá hodnotící kritéria, každé s hodnocením od 1 do 5:
- Jednoduchost . Jedná se o opatření, jak snadné je použít navrhované řešení. Body odečtené za použití dalších balíčků nebo za definování čehokoli jiného než jednoduchého makra pro pohodlí.
- Flexibilita . To zahrnuje především to, jak snadné je použít v jiných kontextech, v tomto případě různých tvarech, velikostech a tloušťkách rámů.
- Přesnost . Jednoduše řečeno, jak esteticky řešení vypadá, zejména to, jak dobře je glyf centrován v kruhu a jak zapadá do okolního volně běžícího textu.
Tady to máme:
-
Řešení
raisebox
.Díky Jimi Oke za rychlé prsty. Toto přišlo jako první a je to ten, který se mi obzvlášť líbí pro aplikaci, kterou jsem měl na mysli. Je to tak snadné jako:
\raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {8}}}
Nic víc. Z hlediska jednoduchosti to není o nic lepší než toto.Solid 5/5 , protože nejsou potřeba žádné další balíčky a nepraktická definice může být triviálně abstrahována v jedné linii
\def
.Flexibilně je toto řešení poměrně nízké, protože nemáte žádnou kontrolu nad velikostí kruhu ani parametry (jsem si jist, že by někteří hackeři TeXu dokažte, že se mýlím, ale pro lásku k $ DEITY nás ušetřte takových ohavností). 2/5 si zde zaslouží. {1}
Problém s přesností je jako vždy subjektivní, ale musíte si pohrát se svislými vzdálenostmi, abyste jej dostali správně ™ pro písmo, které vybrali. 2/5 .
-
ding
-y řešení.Toto přišlo z TH. , což naznačuje použití některých předdefinovaných symbolů glyfů. Vševědoucí symboly -4 dokument říká, že Jedinou skutečnou cestou, jak to udělat, je použít:
\usepackage{pifont} \ding{172}--\ding{181} % seriffed fonts \ding{192}--\ding{201} % sans-seriffed fonts
Nebo dokonce názvosloví Go board:
\usepackage{igo} \whitestone{1}--\whitestone{99}
Na straně jednoduchosti je sazba 4,5 / 5 , i když se zdráhám dát mu přísných 5 kvůli zapojeným dalším balíčkům.
Toto není vůbec flexibilní. Pokud se vám nelíbí glyfy, jste sami. 1/5 .
Samotné glyfy jsou dobře navržené, jak by se dalo očekávat, a čísla jsou vizuálně dobře zarovnaný s kruhy. I když máte písmo typu aa odlišným stylem, písmo čísel nemusí dobře zapadat do textu.
-
Povinné
tikz
řešení.Ahh, vždy to tak je, to není. Je to kvůli Stefanovi Kottwitzovi .
\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}
Osobně nejsem do
tikz
(vím , Měl bych se to naučit jeden z těchto dnů), takže jít s tím by pro mě bylo jednorázové použití balíčku, kterému bych se rád vyhnul. Nemohu zde dát více než 2/5 , aletikz
fanboiz (a galz!) by to měl narazit až na 4/5 .Jak pokud jde o flexibilitu: toto je skutečná dohoda. Stefan předvedl, jak používat symboly v kroužku se všemi vyjmenovanými seznamy. Určitě jsou možné různé tvary rámečků s různým stupněm přizpůsobení kolem glyfů. Nesporné 5/5 .
Zarovnání základní úrovně je prvotřídní, aniž byste si museli pohrávat s některými manuálními úpravami, což je docela hezké. Mezery kolem symbolu vypadají dobře, i když ve volně běžícím textu by kruh měl být nejlépe těsnější kolem čísla, čehož lze dosáhnout hraním s parametrem
inner sep
v definice příkazu. 5/5 zde. -
pict2e
/picture
řešeníPozdní přírůstek od Herberta navrhuje použití některých základních primitiv z balíčků
picture
apict2e
. Tady je:\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}}}}
Z hlediska jednoduchosti to příliš nehodnotí. Vypadá to trochu spletitě, i když po jeho prostudování rozhodně srozumitelně a používá dva další balíčky. 2/5 je zde rozumné skóre.
Flexibilita není zcela postavena – dovnitř, ale je to určitě možné. Poloměr kruhu lze upravit úpravou faktoru
1.5
a lze upravit základní linku. 3,5 / 5 .Jak je uvedeno v této definici, účaří okolního textu je tečna ke kruhu, místo aby byla zarovnána s kroužkem číselná základna. To může být za určitých okolností žádoucí, ale čísla tímto způsobem vypadají trochu na místě. Lepších výsledků lze dosáhnout pomocí některých dalších výpočtů při umisťování polí a 3,5 / 5 k reflek Tento potenciál.
-
Další povinné
tikz
řešeníMatthew Leingang a morbusg si to vyzkoušeli, a i když je jejich úsilí jistě oceněno, mám pocit, že Stefanovo řešení je jednodušší. Jsem vděčný za vynaložené úsilí (a vaši pokoru) a hlasoval jsem pro obě vaše odpovědi.
Konečné skóre:
- Jednoduchost :
raisebox
- Flexibilita :
tikz
- Přesnost : svázáno mezi
tikz
ading
Celkově: tikz
bez váhání ( aklamace od veřejnosti, házené klobouky, mávané kapesníky a tak dále).
Nakonec nějaký testovací kód:
\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} Pokud se někdo rozhodne rozhodnout napsat takovou věc, dejte mi vědět a já ji do této odpovědi zahrnu bez dalších nákladů, ale mějte na paměti, že příspěvek bude následně označen \textcircled{18+}
k ochraně slabých.
Komentáře
- vynikající shrnutí, výborně! Díky takovým příspěvkům je tento web užitečný.
- @Yiannis Už ‚ byl nějaký čas, co jsem zveřejnil otázku, ale našel jsem si čas právě teď na vyleštění shrnutí. Doufám, že to bude užitečné pro lidi se stejným problémem.
- Říkáte, “ Mezery kolem symbolu vypadají dobře, i když ve volném běhu text, který by kruh měl mít přednostně těsnější kolem čísla. “ To lze snadno opravit změnou
inner sep=2pt
nainner sep=1pt
v definici příkazu\circled
. - @Matt: Jistě – mým záměrem zde bylo poukázat na estetický problém, ale myslím Nebyl jsem ‚ v tom úplně jasný. Informace o tom, co je třeba změnit, jsou nyní zmíněny v příspěvku. Díky.
- @MartinTapankov Problém je vyřešen pomocí raiseboxu za předpokladu, že každému hovoru předchází \ protect.
Odpověď
Nejrychlejší opravou by bylo použití příkazu \raisebox
. Trochu jsem si s tím pohrál a zdá se, že snížení textu o 0,9 bodu dá postavu přibližně do středu:
\textcircled{\raisebox{-0.9pt}{8}}
Dalo by se hrát s ním získat absolutní střed, ale je to rozhodně mezi 0,9 a 1 bodem. Nápad jsem dostal zde . Zdá se, že příkaz \textcircled
funguje nejlépe pro text! Ale každopádně by to mělo váš problém vyřešit.
Komentáře
- To se ‚ změní základní čísla, která nemusí být žádoucí. Ale možná díky vnějšímu
\raisebox
ke zvýšení celého zakroužkovaného čísla by bylo možné udržovat základní linie. - Mais oui! Měl jsem na to myslet sám. Dík! ‚ Budu trochu čekat na další návrhy, než to označím jako přijaté.
- @TH. Je pravda, ale to pro mě ‚ nezáleží – čísla se neobjevují ve volně běžícím textu, ale jsou spíše hlavičkami sloupců tabulky nebo slouží k označení.
- Ale výstup
\textcircled
ve skutečnosti již má nižší základní linii s\raisebox
. Pokud tedy autor upřednostňuje vše v jedné rovině, měl by jít napifont
. U vnějšího\raisebox
je maximum zvýšení o 0,5 bodu, čímž se kruh vrátí do původní polohy, která však neodpovídá textu. Zvýšení všeho nad 0,5 bodu začne posouvat číslo, nikoli kruh, čímž se vyvrátí počáteční úsilí. Pokud tedy autor chce dobrý\textcircled
, pak zde ‚ jeden:\raisebox{.5pt}{\textcircled{\raisebox{-.9pt} {8}} }
. To je ve skutečnosti docela dobré. - @Martin: můžete také obdržet návrh TikZ. 😉
Odpověď
morbusg již zmíněn že některá písma mají obklopená čísla jako Unicode glyfy a ukazují, jak je přímo vložit. Některá písma poskytují uživatelsky přívětivější rozhraní pro přístup k číslům, např. Linux Libertine a Junicode. To samozřejmě znamená, že se odchylujeme od vašeho požadavku používat Computer Modern. Výhodou těchto čísel Unicode je pravděpodobně to, že byla vytvořena návrhářem písem, takže by nemělo být nutné dolaďování.
Tady je jednoduchý proof-of-concept (musíte také mít nainstalovaný junicode
balíček):
\documentclass{article} \usepackage{fontspec} \usepackage{libertine} \begin{document} \libertineGlyph{uni2460} \libertineGlyph{uni24F5} \libertineGlyph{uni2776} {\fontspec[Ligatures=Discretionary]{Junicode}[1] [[1]] <1>} \end{document}
Tyto metody jsou popsány v příslušných dokumentacích.
Zde je ještě pohodlnější způsob přístupu k těmto množinám čísel. Dvojitě zakroužkovaná čísla jsou (na Unicode) k dispozici od 1 do 10, ostatní od 0 do 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}
Komentáře
- Myslím, že to nefunguje s
pdflatex
. - @moose Ano .. Musím zkontrolovat, zda první bit kódu funguje s aktuálním
libertine
vůbec (ale pdfLaTeX by měl být v pořádku), druhý bit je pouze XeLaTeX / LuaLaTeX, měl bych to uvést také v odpovědi.
Odpověď
PGF je u této aplikace přehnané, ale pokud ji již máte načten, můžete ji použít:
\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}
Jak můžete vidět, v kruzích je prostor navíc oproti \textcircled
ale není to špatné.
pre-post editace: Vidím, že mě Stefan a morbusg zmlátili. No dobře.
Komentáře
- Myslím, že externí proces je opravdu přehnaný na něco, co lze v LaTeXu provést. Můžete jej jednoduše zkonstruovat jako \ newcommand {\ Ring} [1] {\ raisebox {-1pt} {\ begin {tabular} {@ {} c @ {}} {\ small # 1} \ [ -11,5pt] \ BigCircle \ end {tabular}}}. Automatické přizpůsobení rozměrů je ponecháno jako cvičení na čtenáři 🙂
- Peter, jaký externí proces?
- @ u0b34a0f6ae: Myslím, že Peter odkazuje na skutečnost, že
tikz
používá spoustu\special
příkazů přidaných poté, co TeX zpracuje vstup. ‚ Je to „externí“ pro normální trávicí systém TeX.
Odpovědět
Ze souboru symbols.pdf to vypadá, že pifont
může dělat, co chcete, pomocí \ding{172}
až \ding{181}
nebo \ding{192}
prostřednictvím \ding{201}
.
Nebo igo
balíček s \whitestone{1}
až \whitestone{99}
, i když to je určeno pro sazbu desek Go.
Zdá se, že řešení bylo nalezeno, ale zde je jednoduché srovnání.
\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}
Komentáře
- Toto je skvělé řešení. Pifonty jsou však ve srovnání s výstupem
\textcircled
poněkud přeplněné. Pro je to, že písma jsou v jedné rovině s textem, což může být pro autora dobré. - @TH: Pěkné. Co dělá balíček textcomp?
- @Jimi: Myslel jsem, že je to nutné pro
\textcircled
. Mýlil jsem se. (Díval jsem se na tabulku 17 souboru Symbols.pdf a uvádí, žetextcomp
je vyžadován pro\newtie
, ale nebyl jsem ‚ Čtu dostatečně pečlivě.)
Aktualizoval jsem kód.
Odpověď
The mathdesign
definuje \figurecircled
, který má lepší mezery pro čísla než \textcircled
ano.
Balíček mathdesign je nekompatibilní s amsfonts
a amssymb
ale pokud stejně používáte písmo mathdesign, není to problém.
Komentáře
- Tato odpověď byla zamítnuta? Mohl by kdokoli to vysvětlit, proč si myslí, že je to špatné řešení problému?
- Nechtěl jsem vás ‚ odmítnout, ale dostal jsem chybu s jednoduchým testovací soubor. Můžete poskytnout MWE? Moje chybová zpráva:
! 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!
Odpověď
@Stefan “ Odpověď je dobrá, ale vylepšil jsem jeho odpověď.
Za prvé, pokud jsou \circled{1}
a \circled{10}
umístěny společně , tyto dva kruhy nebudou mít stejnou velikost, proto jsem do příkazu \circled
přidal volitelný parametr. Volitelný parametr byl přeřazen jako zástupný symbol, aby se zajistilo, že se tyto kruhy objeví v stejná velikost.
Navíc, protože jsem použil \ifblank
, který poskytuje balíček etoolbox
, ke kontrole, zda byl poskytnut volitelný parametr, Použil jsem \robustify
, aby byl příkaz robustní. To obejde nevýhodu používání \DeclearRobustCommand
, kterou zmiňuje @Stefan v komentáři své odpovědi. \protact
tedy již není potřeba.
Kód:
\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}
Výsledek:
Komentáře
- znáte možnost
minimum size
pro uzly? - @percusse Omlouváme se, ale Nerozumím vám ‚.
- Můžete definovat minimální velikost pro uzly kruhu bez rámečku nebo fantomu s jednotnou velikostí.
- @percusse To je ‚ dobrý návrh , nicméně, nemyslím si ‚ že rozumíte myšlence v mém příspěvku. Navrhl jsem tento volitelný parametr pro jednotnou velikost kruhů, protože různě velké kruhy, které jsou zarovnány dohromady, budou vypadat nepřátelsky.
Odpovědět
Ještě jednodušší:
\textcircled{\small{2}}
nebo
{\large \textcircled{\small 2}}
nebo
{\Large \textcircled{\normalsize 2}}
[vyd. Segletes poskytující MWE & obrázek]
\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}
Komentáře
- Toto může fungovat, když kruh není obklopen textem a velikost písma čísla není problém – ale já ‚ raději použiji jedno z dalších řešení místo toho.
- Můžeme převrátit barvy uvnitř kruhu?
Odpovědět
toto odpověď byla převedena v balíčku na CTAN: https://ctan.org/pkg/circledsteps
Odpovědi jsou všechny pěkné, a zejména ten tikz
je velmi konfigurovatelný. Ale má problém: nemůžete jej bezpečně použít v jiných tikzpicture
s. Takže jsem spojil několik věcí a implementoval toto:
\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}
Komentáře
- Vypadá skvěle! (+1)
Odpovědět
pomocí výchozích obrázkových příkazů:
\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}
Odpověď
S prostým textem (náhodou na to narazil a zapamatoval si tuto otázku):
\def\circled#1{{\ooalign{\hfil\lower.1ex\hbox{#1}\hfil\crcr\Orb}}} $\circled1 \circled2 \circled3 \ldots \circled9 \quad \circled{23}$ \bye
S XeTeX:
\font\circled="Arial Unicode MS" {\circled ➀} Didn"t occur to me {\circled ➄} earlier that some fonts have {\circled ➇} these. \bye
Nebo možná s 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 =“ Hostitelem imgur.com „/>
Sakra, Stefan mě porazil tím hezčím.
Odpověď
Zde je \pdfliteral
řešení. Funguje pouze pro jednotlivá čísla.
\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
komentáře
- Proč transformace souřadnic?
- @percusse Ve skutečnosti jsem zkopíroval kód sem a trochu ho upravil. Pokud můžete poskytnout nějaké zdroje, abyste se dozvěděli více o kódování PDF, byl bych opravdu šťastný.
- Je to vlastně PostScript, ale PDF také podporuje mnoho grafických objektů. Je tedy ‚ trochu těžkopádné porozumět množině všech operátorů podporovaných v PDF. Ale alespoň pro začátek čtení tohoto kódu můžete použít referenční příručku adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/… . Také ve specifikaci ISO (tabulka 59 v adobe.com/devnet/pdf/pdf_reference.html ) můžete rozpoznat operátory TikZ namapované na frontend;). Prvním problémem, který je třeba uchopit, je nastavení ohraničovacího rámečku, zbytek je obvyklá notace PS.
Odpověď
Použití Balíček a symboly pifont a symboly od \ding{172}
do \ding{211}
snadno máte velmi vynikající čísla v kroužku, ale pokud chcete kroužkovat čísla větší než 10 máme problém. Jak zde ukázali další uživatelé stackexchange, můžeme problém vyřešit, pokud čísla nejsou příliš velká, ale věci se zhoršily (složité LaTeX kódy) a můžeme mít problémy, pokud píšeme do textu (pokud se kruh zvětšil, LaTeX může být nuceni zvětšit prostor mezi řádky, nebo možná překrýt kruh na sousedních horních a dolních řádcích): věci jsou o něco jednodušší, pokud chceme v seznamu položek pouze zakroužkované číslo. Tento nedostatek flexibility by mohl být v některých případech nepříjemný. Zdá se, že rozumné řešení používá balíček tcolorbox : po pokusech jsem zjistil, že do preambule musíme jednoduše přidat toto
\usepackage{tcolorbox} \newcommand{\ciao}[1]{{\setlength\fboxrule{0pt}\fbox{\tcbox[colframe=black,colback=white,shrink tight,boxrule=0.5pt,extrude by=1mm]{\small #1}}}}
a zavoláme v dokumentu příkaz \ ciao, když chceme „zakroužkované“ číslo (příklad: \ ciao {12} bude „zakroužkovat“ číslo 12). Mimochodem, použití fboxu v linii preambule je důležité, protože bez něj by zaoblená krabička mohla vyčnívat z linie vlevo nebo vpravo, když jsou na okraji linky: to by bylo velmi neestetické.
Pokračování, v tomto řešení vidím 3 klady a 1 zápory:
- klady : jednoduchý kód, dobrá práce i uvnitř textu, flexibilita (také velká čísla & pro případ, že bychom mohli snadno hrát s okraji nebo barvami: viz 0,5 bodu nebo černá & bílá v řádku preambule).
- proti : nemáme kruhy, ale zaoblenou krabičku, ale považuji to za rozumný kompromis.
Příkladem použití této metody je
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.
, která dává
Upozorňujeme, že čísla nevyčnívají a že mezera mezi řádky je vždy stejná: bez ohledu na to, zda číslo máme nebo ne. Stručně řečeno, tato téměř zakroužkovaná čísla fungují velmi dobře, i když jsou uvnitř textu.
\textcircled
?